0x608060405234801562000010575f80fd5b50604051620025b2380380620025b28339818101604052810190620000369190620001c2565b806040518060400160405280600381526020017f544a4300000000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f544a430000000000000000000000000000000000000000000000000000000000815250815f9081620000b3919062000456565b508060019081620000c5919062000456565b505050620000d981620000e160201b60201c565b505062000566565b8060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f2f658b440c35314f52658ea8a740e05b284cdc84dc9ae01e891f21b8933e7cad816040516200015291906200054b565b60405180910390a150565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6200018c8262000161565b9050919050565b6200019e8162000180565b8114620001a9575f80fd5b50565b5f81519050620001bc8162000193565b92915050565b5f60208284031215620001da57620001d96200015d565b5b5f620001e984828501620001ac565b91505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200026e57607f821691505b60208210810362000284576200028362000229565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620002e87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620002ab565b620002f48683620002ab565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6200033e6200033862000332846200030c565b62000315565b6200030c565b9050919050565b5f819050919050565b62000359836200031e565b62000371620003688262000345565b848454620002b7565b825550505050565b5f90565b6200038762000379565b620003948184846200034e565b505050565b5b81811015620003bb57620003af5f826200037d565b6001810190506200039a565b5050565b601f8211156200040a57620003d4816200028a565b620003df846200029c565b81016020851015620003ef578190505b62000407620003fe856200029c565b83018262000399565b50505b505050565b5f82821c905092915050565b5f6200042c5f19846008026200040f565b1980831691505092915050565b5f6200044683836200041b565b9150826002028217905092915050565b6200046182620001f2565b67ffffffffffffffff8111156200047d576200047c620001fc565b5b62000489825462000256565b62000496828285620003bf565b5f60209050601f831160018114620004cc575f8415620004b7578287015190505b620004c3858262000439565b86555062000532565b601f198416620004dc866200028a565b5f5b828110156200050557848901518255600182019150602085019450602081019050620004de565b8683101562000525578489015162000521601f8916826200041b565b8355505b6001600288020188555050505b505050505050565b620005458162000180565b82525050565b5f602082019050620005605f8301846200053a565b92915050565b61203e80620005745f395ff3fe608060405234801561000f575f80fd5b5060043610610109575f3560e01c806370a08231116100a0578063a22cb4651161006f578063a22cb465146102b3578063b88d4fde146102cf578063bf7e214f146102eb578063c87b56dd14610309578063e985e9c51461033957610109565b806370a082311461022b5780637a9e5e4b1461025b5780638fb360371461027757806395d89b411461029557610109565b806323b872dd116100dc57806323b872dd146101a757806340d097c3146101c357806342842e0e146101df5780636352211e146101fb57610109565b806301ffc9a71461010d57806306fdde031461013d578063081812fc1461015b578063095ea7b31461018b575b5f80fd5b61012760048036038101906101229190611833565b610369565b6040516101349190611878565b60405180910390f35b61014561044a565b604051610152919061191b565b60405180910390f35b6101756004803603810190610170919061196e565b6104d9565b60405161018291906119d8565b60405180910390f35b6101a560048036038101906101a09190611a1b565b6104f4565b005b6101c160048036038101906101bc9190611a59565b61050a565b005b6101dd60048036038101906101d89190611aa9565b610609565b005b6101f960048036038101906101f49190611a59565b610630565b005b6102156004803603810190610210919061196e565b61064f565b60405161022291906119d8565b60405180910390f35b61024560048036038101906102409190611aa9565b610660565b6040516102529190611ae3565b60405180910390f35b61027560048036038101906102709190611aa9565b610716565b005b61027f610800565b60405161028c9190611b0b565b60405180910390f35b61029d61082c565b6040516102aa919061191b565b60405180910390f35b6102cd60048036038101906102c89190611b4e565b6108bc565b005b6102e960048036038101906102e49190611cb8565b6108d2565b005b6102f36108f7565b60405161030091906119d8565b60405180910390f35b610323600480360381019061031e919061196e565b61091f565b604051610330919061191b565b60405180910390f35b610353600480360381019061034e9190611d38565b610985565b6040516103609190611878565b60405180910390f35b5f7f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061043357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610443575061044282610a13565b5b9050919050565b60605f805461045890611da3565b80601f016020809104026020016040519081016040528092919081815260200182805461048490611da3565b80156104cf5780601f106104a6576101008083540402835291602001916104cf565b820191905f5260205f20905b8154815290600101906020018083116104b257829003601f168201915b5050505050905090565b5f6104e382610a7c565b506104ed82610b02565b9050919050565b6105068282610501610b3b565b610b42565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361057a575f6040517f64a0ae9200000000000000000000000000000000000000000000000000000000815260040161057191906119d8565b60405180910390fd5b5f61058d8383610588610b3b565b610b54565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610603578382826040517f64283d7b0000000000000000000000000000000000000000000000000000000081526004016105fa93929190611dd3565b60405180910390fd5b50505050565b5f60075f81548092919061061c90611e35565b91905055905061062c8282610d5f565b5050565b61064a83838360405180602001604052805f8152506108d2565b505050565b5f61065982610a7c565b9050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036106d1575f6040517f89c62b640000000000000000000000000000000000000000000000000000000081526004016106c891906119d8565b60405180910390fd5b60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f61071f610b3b565b90506107296108f7565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461079857806040517f068ca9d800000000000000000000000000000000000000000000000000000000815260040161078f91906119d8565b60405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff163b036107f357816040517fc2f31e5e0000000000000000000000000000000000000000000000000000000081526004016107ea91906119d8565b60405180910390fd5b6107fc82610d7c565b5050565b5f600660149054906101000a900460ff1661081e575f60e01b610827565b638fb3603760e01b5b905090565b60606001805461083b90611da3565b80601f016020809104026020016040519081016040528092919081815260200182805461086790611da3565b80156108b25780601f10610889576101008083540402835291602001916108b2565b820191905f5260205f20905b81548152906001019060200180831161089557829003601f168201915b5050505050905090565b6108ce6108c7610b3b565b8383610df6565b5050565b6108dd84848461050a565b6108f16108e8610b3b565b85858585610f5f565b50505050565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606061092a82610a7c565b505f61093461110b565b90505f8151116109525760405180602001604052805f81525061097d565b8061095c84611121565b60405160200161096d929190611eb6565b6040516020818303038152906040525b915050919050565b5f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f80610a87836111eb565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610af957826040517f7e273289000000000000000000000000000000000000000000000000000000008152600401610af09190611ae3565b60405180910390fd5b80915050919050565b5f60045f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f33905090565b610b4f8383836001611224565b505050565b5f80610b5f846111eb565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614610ba057610b9f8184866113e3565b5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610c2b57610bdf5f855f80611224565b600160035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825403925050819055505b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614610caa57600160035f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8460025f8681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4809150509392505050565b610d78828260405180602001604052805f8152506114a6565b5050565b8060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f2f658b440c35314f52658ea8a740e05b284cdc84dc9ae01e891f21b8933e7cad81604051610deb91906119d8565b60405180910390a150565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e6657816040517f5b08ba18000000000000000000000000000000000000000000000000000000008152600401610e5d91906119d8565b60405180910390fd5b8060055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610f529190611878565b60405180910390a3505050565b5f8373ffffffffffffffffffffffffffffffffffffffff163b1115611104578273ffffffffffffffffffffffffffffffffffffffff1663150b7a02868685856040518563ffffffff1660e01b8152600401610fbd9493929190611f2b565b6020604051808303815f875af1925050508015610ff857506040513d601f19601f82011682018060405250810190610ff59190611f89565b60015b611079573d805f8114611026576040519150601f19603f3d011682016040523d82523d5f602084013e61102b565b606091505b505f81510361107157836040517f64a0ae9200000000000000000000000000000000000000000000000000000000815260040161106891906119d8565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461110257836040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016110f991906119d8565b60405180910390fd5b505b5050505050565b606060405180602001604052805f815250905090565b60605f600161112f846114c9565b0190505f8167ffffffffffffffff81111561114d5761114c611b94565b5b6040519080825280601f01601f19166020018201604052801561117f5781602001600182028036833780820191505090505b5090505f82602001820190505b6001156111e0578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85816111d5576111d4611fb4565b5b0494505f850361118c575b819350505050919050565b5f60025f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b808061125c57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561138e575f61126b84610a7c565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156112d557508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b80156112e857506112e68184610985565b155b1561132a57826040517fa9fbf51f00000000000000000000000000000000000000000000000000000000815260040161132191906119d8565b60405180910390fd5b811561138c57838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b8360045f8581526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b6113ee83838361161a565b6114a1575f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361146257806040517f7e2732890000000000000000000000000000000000000000000000000000000081526004016114599190611ae3565b60405180910390fd5b81816040517f177e802f000000000000000000000000000000000000000000000000000000008152600401611498929190611fe1565b60405180910390fd5b505050565b6114b083836116da565b6114c46114bb610b3b565b5f858585610f5f565b505050565b5f805f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611525577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161151b5761151a611fb4565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310611562576d04ee2d6d415b85acef8100000000838161155857611557611fb4565b5b0492506020810190505b662386f26fc10000831061159157662386f26fc10000838161158757611586611fb4565b5b0492506010810190505b6305f5e10083106115ba576305f5e10083816115b0576115af611fb4565b5b0492506008810190505b61271083106115df5761271083816115d5576115d4611fb4565b5b0492506004810190505b6064831061160257606483816115f8576115f7611fb4565b5b0492506002810190505b600a8310611611576001810190505b80915050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156116d157508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061169257506116918484610985565b5b806116d057508273ffffffffffffffffffffffffffffffffffffffff166116b883610b02565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361174a575f6040517f64a0ae9200000000000000000000000000000000000000000000000000000000815260040161174191906119d8565b60405180910390fd5b5f61175683835f610b54565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146117c8575f6040517f73c6ac6e0000000000000000000000000000000000000000000000000000000081526004016117bf91906119d8565b60405180910390fd5b505050565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611812816117de565b811461181c575f80fd5b50565b5f8135905061182d81611809565b92915050565b5f60208284031215611848576118476117d6565b5b5f6118558482850161181f565b91505092915050565b5f8115159050919050565b6118728161185e565b82525050565b5f60208201905061188b5f830184611869565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156118c85780820151818401526020810190506118ad565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6118ed82611891565b6118f7818561189b565b93506119078185602086016118ab565b611910816118d3565b840191505092915050565b5f6020820190508181035f83015261193381846118e3565b905092915050565b5f819050919050565b61194d8161193b565b8114611957575f80fd5b50565b5f8135905061196881611944565b92915050565b5f60208284031215611983576119826117d6565b5b5f6119908482850161195a565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6119c282611999565b9050919050565b6119d2816119b8565b82525050565b5f6020820190506119eb5f8301846119c9565b92915050565b6119fa816119b8565b8114611a04575f80fd5b50565b5f81359050611a15816119f1565b92915050565b5f8060408385031215611a3157611a306117d6565b5b5f611a3e85828601611a07565b9250506020611a4f8582860161195a565b9150509250929050565b5f805f60608486031215611a7057611a6f6117d6565b5b5f611a7d86828701611a07565b9350506020611a8e86828701611a07565b9250506040611a9f8682870161195a565b9150509250925092565b5f60208284031215611abe57611abd6117d6565b5b5f611acb84828501611a07565b91505092915050565b611add8161193b565b82525050565b5f602082019050611af65f830184611ad4565b92915050565b611b05816117de565b82525050565b5f602082019050611b1e5f830184611afc565b92915050565b611b2d8161185e565b8114611b37575f80fd5b50565b5f81359050611b4881611b24565b92915050565b5f8060408385031215611b6457611b636117d6565b5b5f611b7185828601611a07565b9250506020611b8285828601611b3a565b9150509250929050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b611bca826118d3565b810181811067ffffffffffffffff82111715611be957611be8611b94565b5b80604052505050565b5f611bfb6117cd565b9050611c078282611bc1565b919050565b5f67ffffffffffffffff821115611c2657611c25611b94565b5b611c2f826118d3565b9050602081019050919050565b828183375f83830152505050565b5f611c5c611c5784611c0c565b611bf2565b905082815260208101848484011115611c7857611c77611b90565b5b611c83848285611c3c565b509392505050565b5f82601f830112611c9f57611c9e611b8c565b5b8135611caf848260208601611c4a565b91505092915050565b5f805f8060808587031215611cd057611ccf6117d6565b5b5f611cdd87828801611a07565b9450506020611cee87828801611a07565b9350506040611cff8782880161195a565b925050606085013567ffffffffffffffff811115611d2057611d1f6117da565b5b611d2c87828801611c8b565b91505092959194509250565b5f8060408385031215611d4e57611d4d6117d6565b5b5f611d5b85828601611a07565b9250506020611d6c85828601611a07565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680611dba57607f821691505b602082108103611dcd57611dcc611d76565b5b50919050565b5f606082019050611de65f8301866119c9565b611df36020830185611ad4565b611e0060408301846119c9565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611e3f8261193b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611e7157611e70611e08565b5b600182019050919050565b5f81905092915050565b5f611e9082611891565b611e9a8185611e7c565b9350611eaa8185602086016118ab565b80840191505092915050565b5f611ec18285611e86565b9150611ecd8284611e86565b91508190509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f611efd82611ed9565b611f078185611ee3565b9350611f178185602086016118ab565b611f20816118d3565b840191505092915050565b5f608082019050611f3e5f8301876119c9565b611f4b60208301866119c9565b611f586040830185611ad4565b8181036060830152611f6a8184611ef3565b905095945050505050565b5f81519050611f8381611809565b92915050565b5f60208284031215611f9e57611f9d6117d6565b5b5f611fab84828501611f75565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f604082019050611ff45f8301856119c9565b6120016020830184611ad4565b939250505056fea26469706673582212207efaaac3911f142b4a1016755842e198201fb20561ba497e7b852eeebf6c2a7b64736f6c6343000816003300000000000000000000000042e4fd04e134a52333bf7be29c0a0b54b2ab202d