60806040526040518060400160405280600a81526020017f5669727475436c6f7564000000000000000000000000000000000000000000008152505f908162000049919062000887565b506040518060400160405280600581526020017f56495254550000000000000000000000000000000000000000000000000000008152506001908162000090919062000887565b507315344e6f02b78da832e266bf6b5f40894a30aac8600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620000f1575f80fd5b505f600590505f6005905060405180606001604052803373ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281525060025f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010155604082015181600201559050507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60065f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555033600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200028d33336200059f60201b60201c565b606460586012600a620002a1919062000ae8565b6305f5e100620002b2919062000b38565b620002be919062000b38565b620002ca919062000baf565b60055f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60055f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546040516200040a919062000bf7565b60405180910390a36064600c6012600a62000426919062000ae8565b6305f5e10062000437919062000b38565b62000443919062000b38565b6200044f919062000baf565b60055f600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60055f600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546040516200058f919062000bf7565b60405180910390a3505062000c12565b8160085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200069f57607f821691505b602082108103620006b557620006b46200065a565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620007197fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620006dc565b620007258683620006dc565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6200076f6200076962000763846200073d565b62000746565b6200073d565b9050919050565b5f819050919050565b6200078a836200074f565b620007a2620007998262000776565b848454620006e8565b825550505050565b5f90565b620007b8620007aa565b620007c58184846200077f565b505050565b5b81811015620007ec57620007e05f82620007ae565b600181019050620007cb565b5050565b601f8211156200083b576200080581620006bb565b6200081084620006cd565b8101602085101562000820578190505b620008386200082f85620006cd565b830182620007ca565b50505b505050565b5f82821c905092915050565b5f6200085d5f198460080262000840565b1980831691505092915050565b5f6200087783836200084c565b9150826002028217905092915050565b620008928262000623565b67ffffffffffffffff811115620008ae57620008ad6200062d565b5b620008ba825462000687565b620008c7828285620007f0565b5f60209050601f831160018114620008fd575f8415620008e8578287015190505b620008f485826200086a565b86555062000963565b601f1984166200090d86620006bb565b5f5b8281101562000936578489015182556001820191506020850194506020810190506200090f565b8683101562000956578489015162000952601f8916826200084c565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b6001851115620009f557808604811115620009cd57620009cc6200096b565b5b6001851615620009dd5780820291505b8081029050620009ed8562000998565b9450620009ad565b94509492505050565b5f8262000a0f576001905062000ae1565b8162000a1e575f905062000ae1565b816001811462000a37576002811462000a425762000a78565b600191505062000ae1565b60ff84111562000a575762000a566200096b565b5b8360020a91508482111562000a715762000a706200096b565b5b5062000ae1565b5060208310610133831016604e8410600b841016171562000ab25782820a90508381111562000aac5762000aab6200096b565b5b62000ae1565b62000ac18484846001620009a4565b9250905081840481111562000adb5762000ada6200096b565b5b81810290505b9392505050565b5f62000af4826200073d565b915062000b01836200073d565b925062000b307fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620009fe565b905092915050565b5f62000b44826200073d565b915062000b51836200073d565b925082820262000b61816200073d565b9150828204841483151762000b7b5762000b7a6200096b565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f62000bbb826200073d565b915062000bc8836200073d565b92508262000bdb5762000bda62000b82565b5b828204905092915050565b62000bf1816200073d565b82525050565b5f60208201905062000c0c5f83018462000be6565b92915050565b611deb8062000c205f395ff3fe6080604052600436106100eb575f3560e01c806370a0823111610089578063a9059cbb11610058578063a9059cbb146102f8578063c9567bf914610334578063dd62ed3e1461034a578063fa26abb114610386576100f2565b806370a08231146102405780637c879f5b1461027c57806395d89b41146102a4578063a8aa1b31146102ce576100f2565b806323b872dd116100c557806323b872dd14610186578063313ce567146101c25780634abe3052146101ec5780636e669d7a14610218576100f2565b806306fdde03146100f6578063095ea7b31461012057806318160ddd1461015c576100f2565b366100f257005b5f80fd5b348015610101575f80fd5b5061010a6103ae565b6040516101179190611489565b60405180910390f35b34801561012b575f80fd5b506101466004803603810190610141919061153e565b61043d565b6040516101539190611596565b60405180910390f35b348015610167575f80fd5b5061017061052a565b60405161017d91906115be565b60405180910390f35b348015610191575f80fd5b506101ac60048036038101906101a791906115d7565b61054a565b6040516101b99190611596565b60405180910390f35b3480156101cd575f80fd5b506101d66105ed565b6040516101e391906115be565b60405180910390f35b3480156101f7575f80fd5b506102006105f2565b60405161020f93929190611636565b60405180910390f35b348015610223575f80fd5b5061023e6004803603810190610239919061166b565b610628565b005b34801561024b575f80fd5b5061026660048036038101906102619190611696565b6106ce565b60405161027391906115be565b60405180910390f35b348015610287575f80fd5b506102a2600480360381019061029d91906116c1565b6106e3565b005b3480156102af575f80fd5b506102b861075d565b6040516102c59190611489565b60405180910390f35b3480156102d9575f80fd5b506102e26107ed565b6040516102ef91906116ff565b60405180910390f35b348015610303575f80fd5b5061031e6004803603810190610319919061153e565b610812565b60405161032b9190611596565b60405180910390f35b34801561033f575f80fd5b50610348610826565b005b348015610355575f80fd5b50610370600480360381019061036b9190611718565b610a62565b60405161037d91906115be565b60405180910390f35b348015610391575f80fd5b506103ac60048036038101906103a7919061180c565b610a82565b005b60605f80546103bc906118ca565b80601f01602080910402602001604051908101604052809291908181526020018280546103e8906118ca565b80156104335780601f1061040a57610100808354040283529160200191610433565b820191905f5260205f20905b81548152906001019060200180831161041657829003601f168201915b5050505050905090565b5f8160065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161051891906115be565b60405180910390a36001905092915050565b6012600a6105389190611a56565b6305f5e1006105479190611aa0565b81565b5f8160065f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546105d29190611ae1565b925050819055506105e4848484610bb5565b90509392505050565b601281565b6002805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154905083565b6106306113be565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610694576040517f9af2b10000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f19755d25ea178146bd0c80065bb3baa90da55af45e342cf3c07de168a277da02816040516106c391906115be565b60405180910390a150565b6005602052805f5260405f205f915090505481565b6106eb6113be565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461074f576040517f9af2b10000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61075982826113e8565b5050565b60606001805461076c906118ca565b80601f0160208091040260200160405190810160405280929190818152602001828054610798906118ca565b80156107e35780601f106107ba576101008083540402835291602001916107e3565b820191905f5260205f20905b8154815290600101906020018083116107c657829003601f168201915b5050505050905090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f61081e338484610bb5565b905092915050565b61082e6113be565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610864575f80fd5b600760159054906101000a900460ff161561087d575f80fd5b5f737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108db573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108ff9190611b28565b90505f737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561095f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109839190611b28565b90505f8273ffffffffffffffffffffffffffffffffffffffff1663e6a4390530846040518363ffffffff1660e01b81526004016109c1929190611b53565b602060405180830381865afa1580156109dc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a009190611b28565b90508060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600760156101000a81548160ff021916908315150217905550505050565b6006602052815f5260405f20602052805f5260405f205f91509150505481565b610a8a6113be565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610aee576040517f9af2b10000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b84849050811015610bad57848482818110610b0e57610b0d611b7a565b5b9050602002016020810190610b239190611696565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef858585818110610b8457610b83611b7a565b5b90506020020135604051610b9891906115be565b60405180910390a38080600101915050610af0565b505050505050565b5f80610bbf6113be565b9050600760159054906101000a900460ff1680610c0757508073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b80610c3d57508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b610c45575f80fd5b8260055f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610c919190611ae1565b9250508190555060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015610d015750600760149054906101000a900460ff16155b8015610d72575060646012600a610d189190611a56565b6305f5e100610d279190611aa0565b610d319190611bd4565b60055f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410155b8015610daa57508073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b15610ffa576001600760146101000a81548160ff0219169083151502179055505f600267ffffffffffffffff811115610de657610de5611c04565b5b604051908082528060200260200182016040528015610e145781602001602082028036833780820191505090505b50905030815f81518110610e2b57610e2a611b7a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ec2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ee69190611b28565b81600181518110610efa57610ef9611b7a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663eb6f613960646012600a610f749190611a56565b6305f5e100610f839190611aa0565b610f8d9190611bd4565b5f8430426040518663ffffffff1660e01b8152600401610fb1959493929190611d2a565b5f604051808303815f87803b158015610fc8575f80fd5b505af1158015610fda573d5f803e3d5ffd5b505050505f600760146101000a81548160ff021916908315150217905550505b5f806002600101546002800154915091503073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161415801561105a575060011515600760159054906101000a900460ff161515145b15611138575f606460075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16146110bc57836110be565b825b876110c99190611aa0565b6110d39190611bd4565b905080866110e19190611ae1565b95508060055f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461112f9190611d82565b92505081905550505b8460055f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546111849190611d82565b9250508190555060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff160361126a578573ffffffffffffffffffffffffffffffffffffffff1660085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8760405161125d91906115be565b60405180910390a36113b0565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16036113495760085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8760405161133c91906115be565b60405180910390a36113af565b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040516113a691906115be565b60405180910390a35b5b600193505050509392505050565b5f60025f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b816002600101819055508060028001819055505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561143657808201518184015260208101905061141b565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61145b826113ff565b6114658185611409565b9350611475818560208601611419565b61147e81611441565b840191505092915050565b5f6020820190508181035f8301526114a18184611451565b905092915050565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6114da826114b1565b9050919050565b6114ea816114d0565b81146114f4575f80fd5b50565b5f81359050611505816114e1565b92915050565b5f819050919050565b61151d8161150b565b8114611527575f80fd5b50565b5f8135905061153881611514565b92915050565b5f8060408385031215611554576115536114a9565b5b5f611561858286016114f7565b92505060206115728582860161152a565b9150509250929050565b5f8115159050919050565b6115908161157c565b82525050565b5f6020820190506115a95f830184611587565b92915050565b6115b88161150b565b82525050565b5f6020820190506115d15f8301846115af565b92915050565b5f805f606084860312156115ee576115ed6114a9565b5b5f6115fb868287016114f7565b935050602061160c868287016114f7565b925050604061161d8682870161152a565b9150509250925092565b611630816114d0565b82525050565b5f6060820190506116495f830186611627565b61165660208301856115af565b61166360408301846115af565b949350505050565b5f602082840312156116805761167f6114a9565b5b5f61168d8482850161152a565b91505092915050565b5f602082840312156116ab576116aa6114a9565b5b5f6116b8848285016114f7565b91505092915050565b5f80604083850312156116d7576116d66114a9565b5b5f6116e48582860161152a565b92505060206116f58582860161152a565b9150509250929050565b5f6020820190506117125f830184611627565b92915050565b5f806040838503121561172e5761172d6114a9565b5b5f61173b858286016114f7565b925050602061174c858286016114f7565b9150509250929050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f84011261177757611776611756565b5b8235905067ffffffffffffffff8111156117945761179361175a565b5b6020830191508360208202830111156117b0576117af61175e565b5b9250929050565b5f8083601f8401126117cc576117cb611756565b5b8235905067ffffffffffffffff8111156117e9576117e861175a565b5b6020830191508360208202830111156118055761180461175e565b5b9250929050565b5f805f805f60608688031215611825576118246114a9565b5b5f611832888289016114f7565b955050602086013567ffffffffffffffff811115611853576118526114ad565b5b61185f88828901611762565b9450945050604086013567ffffffffffffffff811115611882576118816114ad565b5b61188e888289016117b7565b92509250509295509295909350565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806118e157607f821691505b6020821081036118f4576118f361189d565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b600185111561197c57808604811115611958576119576118fa565b5b60018516156119675780820291505b808102905061197585611927565b945061193c565b94509492505050565b5f826119945760019050611a4f565b816119a1575f9050611a4f565b81600181146119b757600281146119c1576119f0565b6001915050611a4f565b60ff8411156119d3576119d26118fa565b5b8360020a9150848211156119ea576119e96118fa565b5b50611a4f565b5060208310610133831016604e8410600b8410161715611a255782820a905083811115611a2057611a1f6118fa565b5b611a4f565b611a328484846001611933565b92509050818404811115611a4957611a486118fa565b5b81810290505b9392505050565b5f611a608261150b565b9150611a6b8361150b565b9250611a987fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484611985565b905092915050565b5f611aaa8261150b565b9150611ab58361150b565b9250828202611ac38161150b565b91508282048414831517611ada57611ad96118fa565b5b5092915050565b5f611aeb8261150b565b9150611af68361150b565b9250828203905081811115611b0e57611b0d6118fa565b5b92915050565b5f81519050611b22816114e1565b92915050565b5f60208284031215611b3d57611b3c6114a9565b5b5f611b4a84828501611b14565b91505092915050565b5f604082019050611b665f830185611627565b611b736020830184611627565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f611bde8261150b565b9150611be98361150b565b925082611bf957611bf8611ba7565b5b828204905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f819050919050565b5f819050919050565b5f611c5d611c58611c5384611c31565b611c3a565b61150b565b9050919050565b611c6d81611c43565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b611ca5816114d0565b82525050565b5f611cb68383611c9c565b60208301905092915050565b5f602082019050919050565b5f611cd882611c73565b611ce28185611c7d565b9350611ced83611c8d565b805f5b83811015611d1d578151611d048882611cab565b9750611d0f83611cc2565b925050600181019050611cf0565b5085935050505092915050565b5f60a082019050611d3d5f8301886115af565b611d4a6020830187611c64565b8181036040830152611d5c8186611cce565b9050611d6b6060830185611627565b611d7860808301846115af565b9695505050505050565b5f611d8c8261150b565b9150611d978361150b565b9250828201905080821115611daf57611dae6118fa565b5b9291505056fea26469706673582212201d787c58302a7ea88c910287207f45d4c92a7bc8ec738f01ca75497a10c5fd3864736f6c63430008160033