60806040526001600b5573733969d7bcbb1d155e9204f9fbd0cec568ebc082600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600e60146101000a81548160ff0219169083151502179055506001600e60156101000a81548160ff021916908315150217905550348015620000a157600080fd5b5060405162004bad38038062004bad8339818101604052810190620000c7919062000625565b733cc6cdda760b79bafa08df41ecfa224f810dceb6600184848160029080519060200190620000f892919062000503565b5080600390805190602001906200011192919062000503565b50620001226200035b60201b60201c565b60008190555050506200014a6200013e6200036060201b60201c565b6200036860201b60201c565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b11156200033f57801562000205576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff16637d3e3dbe30846040518363ffffffff1660e01b8152600401620001cb9291906200071b565b600060405180830381600087803b158015620001e657600080fd5b505af1158015620001fb573d6000803e3d6000fd5b505050506200033e565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614620002bf576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663a0af290330846040518363ffffffff1660e01b8152600401620002859291906200071b565b600060405180830381600087803b158015620002a057600080fd5b505af1158015620002b5573d6000803e3d6000fd5b505050506200033d565b6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff16634420e486306040518263ffffffff1660e01b8152600401620003089190620006fe565b600060405180830381600087803b1580156200032357600080fd5b505af115801562000338573d6000803e3d6000fd5b505050505b5b5b505062000352816200042e60201b60201c565b50505062000948565b600090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200043e6200036060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000464620004d960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620004bd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004b49062000748565b60405180910390fd5b80600d9080519060200190620004d592919062000503565b5050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620005119062000844565b90600052602060002090601f01602090048101928262000535576000855562000581565b82601f106200055057805160ff191683800117855562000581565b8280016001018555821562000581579182015b828111156200058057825182559160200191906001019062000563565b5b50905062000590919062000594565b5090565b5b80821115620005af57600081600090555060010162000595565b5090565b6000620005ca620005c48462000793565b6200076a565b905082815260208101848484011115620005e357600080fd5b620005f08482856200080e565b509392505050565b600082601f8301126200060a57600080fd5b81516200061c848260208601620005b3565b91505092915050565b6000806000606084860312156200063b57600080fd5b600084015167ffffffffffffffff8111156200065657600080fd5b6200066486828701620005f8565b935050602084015167ffffffffffffffff8111156200068257600080fd5b6200069086828701620005f8565b925050604084015167ffffffffffffffff811115620006ae57600080fd5b620006bc86828701620005f8565b9150509250925092565b620006d181620007da565b82525050565b6000620006e6602083620007c9565b9150620006f3826200091f565b602082019050919050565b6000602082019050620007156000830184620006c6565b92915050565b6000604082019050620007326000830185620006c6565b620007416020830184620006c6565b9392505050565b600060208201905081810360008301526200076381620006d7565b9050919050565b60006200077662000789565b90506200078482826200087a565b919050565b6000604051905090565b600067ffffffffffffffff821115620007b157620007b0620008df565b5b620007bc826200090e565b9050602081019050919050565b600082825260208201905092915050565b6000620007e782620007ee565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60005b838110156200082e57808201518184015260208101905062000811565b838111156200083e576000848401525b50505050565b600060028204905060018216806200085d57607f821691505b60208210811415620008745762000873620008b0565b5b50919050565b62000885826200090e565b810181811067ffffffffffffffff82111715620008a757620008a6620008df565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b61425580620009586000396000f3fe608060405234801561001057600080fd5b50600436106101fb5760003560e01c80635c975abb1161011a578063a22cb465116100ad578063ca07aed61161007c578063ca07aed614610577578063d5abeb0114610593578063dd4aa59c146105b1578063e985e9c5146105bb578063f2fde38b146105eb576101fb565b8063a22cb46514610505578063b88d4fde14610521578063c4ae31681461053d578063c87b56dd14610547576101fb565b80637c735d44116100e95780637c735d441461047d5780638da5cb5b146104ad57806394d008ef146104cb57806395d89b41146104e7576101fb565b80635c975abb146103f55780636352211e1461041357806370a0823114610443578063715018a614610473576101fb565b8063239c70ae1161019257806341f434341161016157806341f434341461038357806342842e0e146103a15780634d7bde6e146103bd57806355f804b3146103d9576101fb565b8063239c70ae1461030e57806323b872dd1461032c5780632a55205a146103485780633ccfd60b14610379576101fb565b8063081812fc116101ce578063081812fc14610288578063088a4ed0146102b8578063095ea7b3146102d457806318160ddd146102f0576101fb565b806301ffc9a71461020057806304634d8d1461023057806306f2057a1461024c57806306fdde031461026a575b600080fd5b61021a6004803603810190610215919061329a565b610607565b60405161022791906137ef565b60405180910390f35b61024a60048036038101906102459190613235565b610629565b005b6102546106b3565b60405161026191906137ef565b60405180910390f35b6102726106c6565b60405161027f919061386a565b60405180910390f35b6102a2600480360381019061029d919061332d565b610758565b6040516102af9190613736565b60405180910390f35b6102d260048036038101906102cd919061332d565b6107d7565b005b6102ee60048036038101906102e99190613192565b61085d565b005b6102f8610876565b6040516103059190613a0c565b60405180910390f35b61031661088d565b6040516103239190613a0c565b60405180910390f35b6103466004803603810190610341919061308c565b610893565b005b610362600480360381019061035d9190613356565b6108e2565b6040516103709291906137c6565b60405180910390f35b610381610acd565b005b61038b610b89565b604051610398919061384f565b60405180910390f35b6103bb60048036038101906103b6919061308c565b610b9b565b005b6103d760048036038101906103d29190613027565b610bea565b005b6103f360048036038101906103ee91906132ec565b610caa565b005b6103fd610d40565b60405161040a91906137ef565b60405180910390f35b61042d6004803603810190610428919061332d565b610d53565b60405161043a9190613736565b60405180910390f35b61045d60048036038101906104589190613027565b610d65565b60405161046a9190613a0c565b60405180910390f35b61047b610e1e565b005b61049760048036038101906104929190613027565b610ea6565b6040516104a49190613a0c565b60405180910390f35b6104b5610ebe565b6040516104c29190613736565b60405180910390f35b6104e560048036038101906104e091906131ce565b610ee8565b005b6104ef6110e4565b6040516104fc919061386a565b60405180910390f35b61051f600480360381019061051a9190613156565b611176565b005b61053b600480360381019061053691906130db565b61118f565b005b6105456111e0565b005b610561600480360381019061055c919061332d565b611288565b60405161056e919061386a565b60405180910390f35b610591600480360381019061058c9190613192565b611330565b005b61059b611411565b6040516105a89190613a0c565b60405180910390f35b6105b9611417565b005b6105d560048036038101906105d09190613050565b6114bf565b6040516105e291906137ef565b60405180910390f35b61060560048036038101906106009190613027565b611553565b005b60006106128261164b565b806106225750610621826116dd565b5b9050919050565b610631611757565b73ffffffffffffffffffffffffffffffffffffffff1661064f610ebe565b73ffffffffffffffffffffffffffffffffffffffff16146106a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069c9061394c565b60405180910390fd5b6106af828261175f565b5050565b600e60159054906101000a900460ff1681565b6060600280546106d590613d24565b80601f016020809104026020016040519081016040528092919081815260200182805461070190613d24565b801561074e5780601f106107235761010080835404028352916020019161074e565b820191906000526020600020905b81548152906001019060200180831161073157829003601f168201915b5050505050905090565b6000610763826118f5565b610799576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6107df611757565b73ffffffffffffffffffffffffffffffffffffffff166107fd610ebe565b73ffffffffffffffffffffffffffffffffffffffff1614610853576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084a9061394c565b60405180910390fd5b80600b8190555050565b8161086781611954565b6108718383611a60565b505050565b6000610880611ba4565b6001546000540303905090565b600b5481565b823373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146108d1576108d033611954565b5b6108dc848484611ba9565b50505050565b6000806000600a60008681526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161415610a785760096040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff168152505090505b6000610a82611ece565b6bffffffffffffffffffffffff1682602001516bffffffffffffffffffffffff1686610aae9190613b8d565b610ab89190613b5c565b90508160000151819350935050509250929050565b610ad5611757565b73ffffffffffffffffffffffffffffffffffffffff16610af3610ebe565b73ffffffffffffffffffffffffffffffffffffffff1614610b49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b409061394c565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050610b8757600080fd5b565b6daaeb6d7670e522a718067333cd4e81565b823373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610bd957610bd833611954565b5b610be4848484611ed8565b50505050565b610bf2611757565b73ffffffffffffffffffffffffffffffffffffffff16610c10610ebe565b73ffffffffffffffffffffffffffffffffffffffff1614610c66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5d9061394c565b60405180910390fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610cb2611757565b73ffffffffffffffffffffffffffffffffffffffff16610cd0610ebe565b73ffffffffffffffffffffffffffffffffffffffff1614610d26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1d9061394c565b60405180910390fd5b80600d9080519060200190610d3c929190612e21565b5050565b600e60149054906101000a900460ff1681565b6000610d5e82611ef8565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610dcd576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b610e26611757565b73ffffffffffffffffffffffffffffffffffffffff16610e44610ebe565b73ffffffffffffffffffffffffffffffffffffffff1614610e9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e919061394c565b60405180910390fd5b610ea46000611fc6565b565b600c6020528060005260406000206000915090505481565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600e60159054906101000a900460ff161580610f0a5750610f09818461208c565b5b610f49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f409061392c565b60405180910390fd5b600e60149054906101000a900460ff1615610f99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f90906138ec565b60405180910390fd5b600b5482600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610fe79190613b06565b1115611028576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101f906139cc565b60405180910390fd5b6103e882611034610876565b61103e9190613b06565b111561107f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110769061398c565b60405180910390fd5b81600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546110ce9190613b06565b925050819055506110df838361212c565b505050565b6060600380546110f390613d24565b80601f016020809104026020016040519081016040528092919081815260200182805461111f90613d24565b801561116c5780601f106111415761010080835404028352916020019161116c565b820191906000526020600020905b81548152906001019060200180831161114f57829003601f168201915b5050505050905090565b8161118081611954565b61118a838361214a565b505050565b833373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146111cd576111cc33611954565b5b6111d9858585856122c2565b5050505050565b6111e8611757565b73ffffffffffffffffffffffffffffffffffffffff16611206610ebe565b73ffffffffffffffffffffffffffffffffffffffff161461125c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112539061394c565b60405180910390fd5b600e60149054906101000a900460ff1615600e60146101000a81548160ff021916908315150217905550565b6060611293826118f5565b6112d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c99061396c565b60405180910390fd5b6000600d80546112e190613d24565b9050116112fd5760405180602001604052806000815250611329565b600d61130883612335565b604051602001611319929190613707565b6040516020818303038152906040525b9050919050565b611338611757565b73ffffffffffffffffffffffffffffffffffffffff16611356610ebe565b73ffffffffffffffffffffffffffffffffffffffff16146113ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a39061394c565b60405180910390fd5b6103e8816113b8610876565b6113c29190613b06565b1115611403576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fa9061398c565b60405180910390fd5b61140d828261212c565b5050565b6103e881565b61141f611757565b73ffffffffffffffffffffffffffffffffffffffff1661143d610ebe565b73ffffffffffffffffffffffffffffffffffffffff1614611493576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148a9061394c565b60405180910390fd5b600e60159054906101000a900460ff1615600e60156101000a81548160ff021916908315150217905550565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61155b611757565b73ffffffffffffffffffffffffffffffffffffffff16611579610ebe565b73ffffffffffffffffffffffffffffffffffffffff16146115cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c69061394c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561163f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611636906138cc565b60405180910390fd5b61164881611fc6565b50565b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806116a657506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806116d65750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b60007f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611750575061174f826124e2565b5b9050919050565b600033905090565b611767611ece565b6bffffffffffffffffffffffff16816bffffffffffffffffffffffff1611156117c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117bc906139ac565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611835576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182c906139ec565b60405180910390fd5b60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff168152602001826bffffffffffffffffffffffff16815250600960008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055509050505050565b600081611900611ba4565b1115801561190f575060005482105b801561194d575060007c0100000000000000000000000000000000000000000000000000000000600460008581526020019081526020016000205416145b9050919050565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115611a5d576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430836040518363ffffffff1660e01b81526004016119cb929190613751565b60206040518083038186803b1580156119e357600080fd5b505afa1580156119f7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1b9190613271565b611a5c57806040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401611a539190613736565b60405180910390fd5b5b50565b6000611a6b82610d53565b90508073ffffffffffffffffffffffffffffffffffffffff16611a8c61254c565b73ffffffffffffffffffffffffffffffffffffffff1614611aef57611ab881611ab361254c565b6114bf565b611aee576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826006600084815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600090565b6000611bb482611ef8565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611c1b576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080611c2784612554565b91509150611c3d8187611c3861254c565b61257b565b611c8957611c5286611c4d61254c565b6114bf565b611c88576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415611cf0576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611cfd86868660016125bf565b8015611d0857600082555b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815460010191905081905550611dd685611db28888876125c5565b7c0200000000000000000000000000000000000000000000000000000000176125ed565b600460008681526020019081526020016000208190555060007c020000000000000000000000000000000000000000000000000000000084161415611e5e576000600185019050600060046000838152602001908152602001600020541415611e5c576000548114611e5b578360046000838152602001908152602001600020819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611ec68686866001612618565b505050505050565b6000612710905090565b611ef38383836040518060200160405280600081525061118f565b505050565b60008082905080611f07611ba4565b11611f8f57600054811015611f8e5760006004600083815260200190815260200160002054905060007c010000000000000000000000000000000000000000000000000000000082161415611f8c575b6000811415611f82576004600083600190039350838152602001908152602001600020549050611f57565b8092505050611fc1565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080826040516020016120a091906136ec565b6040516020818303038152906040528051906020012090506120d3846120c58361261e565b61265490919063ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161491505092915050565b61214682826040518060200160405280600081525061267b565b5050565b61215261254c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121b7576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600760006121c461254c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661227161254c565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516122b691906137ef565b60405180910390a35050565b6122cd848484610893565b60008373ffffffffffffffffffffffffffffffffffffffff163b1461232f576122f884848484612718565b61232e576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b6060600082141561237d576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506124dd565b600082905060005b600082146123af57808061239890613d87565b915050600a826123a89190613b5c565b9150612385565b60008167ffffffffffffffff8111156123f1577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156124235781602001600182028036833780820191505090505b5090505b600085146124d65760018261243c9190613be7565b9150600a8561244b9190613df4565b60306124579190613b06565b60f81b818381518110612493577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856124cf9190613b5c565b9450612427565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b60008060006006600085815260200190815260200160002090508092508254915050915091565b600073ffffffffffffffffffffffffffffffffffffffff8316925073ffffffffffffffffffffffffffffffffffffffff821691508382148383141790509392505050565b50505050565b60008060e883901c905060e86125dc868684612878565b62ffffff16901b9150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b50505050565b60007f19457468657265756d205369676e6564204d6573736167653a0a33320000000060005281601c52603c6000209050919050565b60008060006126638585612881565b91509150612670816128d3565b819250505092915050565b6126858383612b71565b60008373ffffffffffffffffffffffffffffffffffffffff163b1461271357600080549050600083820390505b6126c56000868380600101945086612718565b6126fb576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8181106126b257816000541461271057600080fd5b50505b505050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261273e61254c565b8786866040518563ffffffff1660e01b8152600401612760949392919061377a565b602060405180830381600087803b15801561277a57600080fd5b505af19250505080156127ab57506040513d601f19601f820116820180604052508101906127a891906132c3565b60015b612825573d80600081146127db576040519150601f19603f3d011682016040523d82523d6000602084013e6127e0565b606091505b5060008151141561281d576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b60009392505050565b6000806041835114156128c35760008060006020860151925060408601519150606086015160001a90506128b787828585612d2e565b945094505050506128cc565b60006002915091505b9250929050565b6000600481111561290d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816004811115612946577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b141561295157612b6e565b6001600481111561298b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8160048111156129c4577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415612a05576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129fc9061388c565b60405180910390fd5b60026004811115612a3f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816004811115612a78577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415612ab9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab0906138ac565b60405180910390fd5b60036004811115612af3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816004811115612b2c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415612b6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b649061390c565b60405180910390fd5b5b50565b6000805490506000821415612bb2576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612bbf60008483856125bf565b600160406001901b178202600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550612c3683612c2760008660006125c5565b612c3085612e11565b176125ed565b6004600083815260200190815260200160002081905550600080838301905073ffffffffffffffffffffffffffffffffffffffff85169150828260007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600183015b818114612cd757808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600181019050612c9c565b506000821415612d13576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806000819055505050612d296000848385612618565b505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115612d69576000600391509150612e08565b600060018787878760405160008152602001604052604051612d8e949392919061380a565b6020604051602081039080840390855afa158015612db0573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612dff57600060019250925050612e08565b80600092509250505b94509492505050565b60006001821460e11b9050919050565b828054612e2d90613d24565b90600052602060002090601f016020900481019282612e4f5760008555612e96565b82601f10612e6857805160ff1916838001178555612e96565b82800160010185558215612e96579182015b82811115612e95578251825591602001919060010190612e7a565b5b509050612ea39190612ea7565b5090565b5b80821115612ec0576000816000905550600101612ea8565b5090565b6000612ed7612ed284613a4c565b613a27565b905082815260208101848484011115612eef57600080fd5b612efa848285613ce2565b509392505050565b6000612f15612f1084613a7d565b613a27565b905082815260208101848484011115612f2d57600080fd5b612f38848285613ce2565b509392505050565b600081359050612f4f816141ac565b92915050565b600081359050612f64816141c3565b92915050565b600081519050612f79816141c3565b92915050565b600081359050612f8e816141da565b92915050565b600081519050612fa3816141da565b92915050565b600082601f830112612fba57600080fd5b8135612fca848260208601612ec4565b91505092915050565b600082601f830112612fe457600080fd5b8135612ff4848260208601612f02565b91505092915050565b60008135905061300c816141f1565b92915050565b60008135905061302181614208565b92915050565b60006020828403121561303957600080fd5b600061304784828501612f40565b91505092915050565b6000806040838503121561306357600080fd5b600061307185828601612f40565b925050602061308285828601612f40565b9150509250929050565b6000806000606084860312156130a157600080fd5b60006130af86828701612f40565b93505060206130c086828701612f40565b92505060406130d186828701612ffd565b9150509250925092565b600080600080608085870312156130f157600080fd5b60006130ff87828801612f40565b945050602061311087828801612f40565b935050604061312187828801612ffd565b925050606085013567ffffffffffffffff81111561313e57600080fd5b61314a87828801612fa9565b91505092959194509250565b6000806040838503121561316957600080fd5b600061317785828601612f40565b925050602061318885828601612f55565b9150509250929050565b600080604083850312156131a557600080fd5b60006131b385828601612f40565b92505060206131c485828601612ffd565b9150509250929050565b6000806000606084860312156131e357600080fd5b60006131f186828701612f40565b935050602061320286828701612ffd565b925050604084013567ffffffffffffffff81111561321f57600080fd5b61322b86828701612fa9565b9150509250925092565b6000806040838503121561324857600080fd5b600061325685828601612f40565b925050602061326785828601613012565b9150509250929050565b60006020828403121561328357600080fd5b600061329184828501612f6a565b91505092915050565b6000602082840312156132ac57600080fd5b60006132ba84828501612f7f565b91505092915050565b6000602082840312156132d557600080fd5b60006132e384828501612f94565b91505092915050565b6000602082840312156132fe57600080fd5b600082013567ffffffffffffffff81111561331857600080fd5b61332484828501612fd3565b91505092915050565b60006020828403121561333f57600080fd5b600061334d84828501612ffd565b91505092915050565b6000806040838503121561336957600080fd5b600061337785828601612ffd565b925050602061338885828601612ffd565b9150509250929050565b61339b81613c1b565b82525050565b6133b26133ad82613c1b565b613dd0565b82525050565b6133c181613c2d565b82525050565b6133d081613c39565b82525050565b60006133e182613ac3565b6133eb8185613ad9565b93506133fb818560208601613cf1565b61340481613ee1565b840191505092915050565b61341881613cbe565b82525050565b600061342982613ace565b6134338185613aea565b9350613443818560208601613cf1565b61344c81613ee1565b840191505092915050565b600061346282613ace565b61346c8185613afb565b935061347c818560208601613cf1565b80840191505092915050565b6000815461349581613d24565b61349f8186613afb565b945060018216600081146134ba57600181146134cb576134fe565b60ff198316865281860193506134fe565b6134d485613aae565b60005b838110156134f6578154818901526001820191506020810190506134d7565b838801955050505b50505092915050565b6000613514601883613aea565b915061351f82613eff565b602082019050919050565b6000613537601f83613aea565b915061354282613f28565b602082019050919050565b600061355a602683613aea565b915061356582613f51565b604082019050919050565b600061357d600f83613aea565b915061358882613fa0565b602082019050919050565b60006135a0602283613aea565b91506135ab82613fc9565b604082019050919050565b60006135c3601b83613aea565b91506135ce82614018565b602082019050919050565b60006135e6600583613afb565b91506135f182614041565b600582019050919050565b6000613609602083613aea565b91506136148261406a565b602082019050919050565b600061362c602f83613aea565b915061363782614093565b604082019050919050565b600061364f601183613aea565b915061365a826140e2565b602082019050919050565b6000613672602a83613aea565b915061367d8261410b565b604082019050919050565b6000613695600f83613aea565b91506136a08261415a565b602082019050919050565b60006136b8601983613aea565b91506136c382614183565b602082019050919050565b6136d781613c8f565b82525050565b6136e681613c99565b82525050565b60006136f882846133a1565b60148201915081905092915050565b60006137138285613488565b915061371f8284613457565b915061372a826135d9565b91508190509392505050565b600060208201905061374b6000830184613392565b92915050565b60006040820190506137666000830185613392565b6137736020830184613392565b9392505050565b600060808201905061378f6000830187613392565b61379c6020830186613392565b6137a960408301856136ce565b81810360608301526137bb81846133d6565b905095945050505050565b60006040820190506137db6000830185613392565b6137e860208301846136ce565b9392505050565b600060208201905061380460008301846133b8565b92915050565b600060808201905061381f60008301876133c7565b61382c60208301866136dd565b61383960408301856133c7565b61384660608301846133c7565b95945050505050565b6000602082019050613864600083018461340f565b92915050565b60006020820190508181036000830152613884818461341e565b905092915050565b600060208201905081810360008301526138a581613507565b9050919050565b600060208201905081810360008301526138c58161352a565b9050919050565b600060208201905081810360008301526138e58161354d565b9050919050565b6000602082019050818103600083015261390581613570565b9050919050565b6000602082019050818103600083015261392581613593565b9050919050565b60006020820190508181036000830152613945816135b6565b9050919050565b60006020820190508181036000830152613965816135fc565b9050919050565b600060208201905081810360008301526139858161361f565b9050919050565b600060208201905081810360008301526139a581613642565b9050919050565b600060208201905081810360008301526139c581613665565b9050919050565b600060208201905081810360008301526139e581613688565b9050919050565b60006020820190508181036000830152613a05816136ab565b9050919050565b6000602082019050613a2160008301846136ce565b92915050565b6000613a31613a42565b9050613a3d8282613d56565b919050565b6000604051905090565b600067ffffffffffffffff821115613a6757613a66613eb2565b5b613a7082613ee1565b9050602081019050919050565b600067ffffffffffffffff821115613a9857613a97613eb2565b5b613aa182613ee1565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613b1182613c8f565b9150613b1c83613c8f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613b5157613b50613e25565b5b828201905092915050565b6000613b6782613c8f565b9150613b7283613c8f565b925082613b8257613b81613e54565b5b828204905092915050565b6000613b9882613c8f565b9150613ba383613c8f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613bdc57613bdb613e25565b5b828202905092915050565b6000613bf282613c8f565b9150613bfd83613c8f565b925082821015613c1057613c0f613e25565b5b828203905092915050565b6000613c2682613c6f565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006bffffffffffffffffffffffff82169050919050565b6000613cc982613cd0565b9050919050565b6000613cdb82613c6f565b9050919050565b82818337600083830152505050565b60005b83811015613d0f578082015181840152602081019050613cf4565b83811115613d1e576000848401525b50505050565b60006002820490506001821680613d3c57607f821691505b60208210811415613d5057613d4f613e83565b5b50919050565b613d5f82613ee1565b810181811067ffffffffffffffff82111715613d7e57613d7d613eb2565b5b80604052505050565b6000613d9282613c8f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613dc557613dc4613e25565b5b600182019050919050565b6000613ddb82613de2565b9050919050565b6000613ded82613ef2565b9050919050565b6000613dff82613c8f565b9150613e0a83613c8f565b925082613e1a57613e19613e54565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4e6f7420596574204163746976652e0000000000000000000000000000000000600082015250565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b7f5349474e41545552455f56414c49444154494f4e5f4641494c45440000000000600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4265796f6e64204d617820537570706c79000000000000000000000000000000600082015250565b7f455243323938313a20726f79616c7479206665652077696c6c2065786365656460008201527f2073616c65507269636500000000000000000000000000000000000000000000602082015250565b7f4265796f6e64204d6178204d696e740000000000000000000000000000000000600082015250565b7f455243323938313a20696e76616c696420726563656976657200000000000000600082015250565b6141b581613c1b565b81146141c057600080fd5b50565b6141cc81613c2d565b81146141d757600080fd5b50565b6141e381613c43565b81146141ee57600080fd5b50565b6141fa81613c8f565b811461420557600080fd5b50565b61421181613ca6565b811461421c57600080fd5b5056fea2646970667358221220161b9bd0bf6f865b3f77b1ae971f0ebf7f8f95b24cdff1c443d0e6c24526081e64736f6c63430008040033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000a576f6c6620205075707300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000357465000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d546d5543616e553871433956645571673344504b773376647143396a68736242454a427453355a4a63764a532f00000000000000000000