60806040525f600c5f6101000a81548160ff0219169083151502179055505f600c60016101000a81548160ff0219169083151502179055506040518060600160405280602981526020016200565360299139600f908162000061919062000c67565b506040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060109081620000a8919062000c67565b506032601155348015620000ba575f80fd5b50733cc6cdda760b79bafa08df41ecfa224f810dceb660016040518060400160405280600681526020017f307854616d6100000000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f307854616d61000000000000000000000000000000000000000000000000000081525081600290816200014f919062000c67565b50806003908162000161919062000c67565b5062000172620003a160201b60201c565b5f819055505050620001996200018d620003a960201b60201c565b620003b060201b60201c565b60016009819055505f6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b11156200038557801562000256576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff16637d3e3dbe30846040518363ffffffff1660e01b81526004016200022192919062000d8e565b5f604051808303815f87803b15801562000239575f80fd5b505af11580156200024c573d5f803e3d5ffd5b5050505062000384565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146200030a576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663a0af290330846040518363ffffffff1660e01b8152600401620002d592919062000d8e565b5f604051808303815f87803b158015620002ed575f80fd5b505af115801562000300573d5f803e3d5ffd5b5050505062000383565b6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff16634420e486306040518263ffffffff1660e01b815260040162000353919062000db9565b5f604051808303815f87803b1580156200036b575f80fd5b505af11580156200037e573d5f803e3d5ffd5b505050505b5b5b50506200039b336101f46200047360201b60201c565b62000f59565b5f6001905090565b5f33905090565b5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b62000494828260405180602001604052805f8152506200049860201b60201c565b5050565b620004ad8383836001620004b260201b60201c565b505050565b5f805490505f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036200051d576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f840362000557576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6200056b5f8683876200088a60201b60201c565b8360055f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f015f8282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055508360055f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f0160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055508460045f8381526020019081526020015f205f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055504260045f8381526020019081526020015f205f0160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505f8190505f85820190508380156200072e57506200072d8773ffffffffffffffffffffffffffffffffffffffff166200089060201b60201c565b5b15620007fc575b818773ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4620007aa5f888480600101955088620008a160201b60201c565b620007e1576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8082036200073557825f5414620007f6575f80fd5b62000867565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808203620007fd575b815f819055505050620008835f868387620009fd60201b60201c565b5050505050565b50505050565b5f80823b90505f8111915050919050565b5f8373ffffffffffffffffffffffffffffffffffffffff1663150b7a02620008ce620003a960201b60201c565b8786866040518563ffffffff1660e01b8152600401620008f2949392919062000e79565b6020604051808303815f875af19250505080156200093057506040513d601f19601f820116820180604052508101906200092d919062000f29565b60015b620009aa573d805f811462000961576040519150601f19603f3d011682016040523d82523d5f602084013e62000966565b606091505b505f815103620009a2576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b50505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000a7f57607f821691505b60208210810362000a955762000a9462000a3a565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000af97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000abc565b62000b05868362000abc565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000b4f62000b4962000b438462000b1d565b62000b26565b62000b1d565b9050919050565b5f819050919050565b62000b6a8362000b2f565b62000b8262000b798262000b56565b84845462000ac8565b825550505050565b5f90565b62000b9862000b8a565b62000ba581848462000b5f565b505050565b5b8181101562000bcc5762000bc05f8262000b8e565b60018101905062000bab565b5050565b601f82111562000c1b5762000be58162000a9b565b62000bf08462000aad565b8101602085101562000c00578190505b62000c1862000c0f8562000aad565b83018262000baa565b50505b505050565b5f82821c905092915050565b5f62000c3d5f198460080262000c20565b1980831691505092915050565b5f62000c57838362000c2c565b9150826002028217905092915050565b62000c728262000a03565b67ffffffffffffffff81111562000c8e5762000c8d62000a0d565b5b62000c9a825462000a67565b62000ca782828562000bd0565b5f60209050601f83116001811462000cdd575f841562000cc8578287015190505b62000cd4858262000c4a565b86555062000d43565b601f19841662000ced8662000a9b565b5f5b8281101562000d165784890151825560018201915060208501945060208101905062000cef565b8683101562000d36578489015162000d32601f89168262000c2c565b8355505b6001600288020188555050505b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000d768262000d4b565b9050919050565b62000d888162000d6a565b82525050565b5f60408201905062000da35f83018562000d7d565b62000db2602083018462000d7d565b9392505050565b5f60208201905062000dce5f83018462000d7d565b92915050565b62000ddf8162000b1d565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101562000e1e57808201518184015260208101905062000e01565b5f8484015250505050565b5f601f19601f8301169050919050565b5f62000e458262000de5565b62000e51818562000def565b935062000e6381856020860162000dff565b62000e6e8162000e29565b840191505092915050565b5f60808201905062000e8e5f83018762000d7d565b62000e9d602083018662000d7d565b62000eac604083018562000dd4565b818103606083015262000ec0818462000e39565b905095945050505050565b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b62000f058162000ecf565b811462000f10575f80fd5b50565b5f8151905062000f238162000efa565b92915050565b5f6020828403121562000f415762000f4062000ecb565b5b5f62000f508482850162000f13565b91505092915050565b6146ec8062000f675f395ff3fe608060405234801561000f575f80fd5b506004361061021a575f3560e01c806369a6b3db11610123578063a22cb465116100ab578063c87b56dd1161007a578063c87b56dd146105fd578063d5abeb011461062d578063e985e9c51461064b578063f12d54d81461067b578063f2fde38b146106995761021a565b8063a22cb4651461058b578063b228d925146105a7578063b4d1147f146105c5578063b88d4fde146105e15761021a565b80637ec4a659116100f25780637ec4a659146104fb57806389f6fbe6146105175780638da5cb5b146105335780638dc251e31461055157806395d89b411461056d5761021a565b806369a6b3db1461048957806370a08231146104a5578063715018a6146104d55780637cb64759146104df5761021a565b80632eb4a7ab116101a657806342842e0e1161017557806342842e0e146103e55780635347b40a146104015780635503a0e81461041d57806362b99ad41461043b5780636352211e146104595761021a565b80632eb4a7ab1461035d5780633cd7b1521461037b5780633e4086e5146103ab57806341f43434146103c75761021a565b806316ba10e0116101ed57806316ba10e0146102b857806318160ddd146102d45780631b6e0095146102f257806323b872dd146103105780632a55205a1461032c5761021a565b806301ffc9a71461021e57806306fdde031461024e578063081812fc1461026c578063095ea7b31461029c575b5f80fd5b61023860048036038101906102339190613034565b6106b5565b6040516102459190613079565b60405180910390f35b6102566106f6565b604051610263919061311c565b60405180910390f35b6102866004803603810190610281919061316f565b610786565b60405161029391906131d9565b60405180910390f35b6102b660048036038101906102b1919061321c565b6107fe565b005b6102d260048036038101906102cd9190613386565b610817565b005b6102dc6108a6565b6040516102e991906133dc565b60405180910390f35b6102fa6108bb565b6040516103079190613079565b60405180910390f35b61032a600480360381019061032591906133f5565b6108cd565b005b61034660048036038101906103419190613445565b61091c565b604051610354929190613483565b60405180910390f35b610365610966565b60405161037291906134c2565b60405180910390f35b610395600480360381019061039091906134db565b61096c565b6040516103a291906133dc565b60405180910390f35b6103c560048036038101906103c0919061316f565b610981565b005b6103cf610a4c565b6040516103dc9190613561565b60405180910390f35b6103ff60048036038101906103fa91906133f5565b610a5e565b005b61041b600480360381019061041691906135d7565b610aad565b005b610425610c76565b604051610432919061311c565b60405180910390f35b610443610d02565b604051610450919061311c565b60405180910390f35b610473600480360381019061046e919061316f565b610d8e565b60405161048091906131d9565b60405180910390f35b6104a3600480360381019061049e919061365e565b610da2565b005b6104bf60048036038101906104ba91906134db565b610e3b565b6040516104cc91906133dc565b60405180910390f35b6104dd610f05565b005b6104f960048036038101906104f491906136b3565b610f8c565b005b61051560048036038101906105109190613386565b611012565b005b610531600480360381019061052c919061365e565b6110a1565b005b61053b611139565b60405161054891906131d9565b60405180910390f35b61056b600480360381019061056691906134db565b611161565b005b61057561128e565b604051610582919061311c565b60405180910390f35b6105a560048036038101906105a091906136de565b61131e565b005b6105af611337565b6040516105bc91906133dc565b60405180910390f35b6105df60048036038101906105da91906137dc565b61133c565b005b6105fb60048036038101906105f691906138c1565b611663565b005b6106176004803603810190610612919061316f565b6116b4565b604051610624919061311c565b60405180910390f35b61063561175b565b60405161064291906133dc565b60405180910390f35b61066560048036038101906106609190613941565b611761565b6040516106729190613079565b60405180910390f35b6106836117ef565b6040516106909190613079565b60405180910390f35b6106b360048036038101906106ae91906134db565b611802565b005b5f6301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106ef57506106ee826118f8565b5b9050919050565b606060028054610705906139ac565b80601f0160208091040260200160405190810160405280929190818152602001828054610731906139ac565b801561077c5780601f106107535761010080835404028352916020019161077c565b820191905f5260205f20905b81548152906001019060200180831161075f57829003601f168201915b5050505050905090565b5f61079082611971565b6107c6576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60065f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b81610808816119ba565b6108128383611ab4565b505050565b61081f611bbd565b73ffffffffffffffffffffffffffffffffffffffff1661083d611139565b73ffffffffffffffffffffffffffffffffffffffff1614610893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088a90613a26565b60405180910390fd5b80601090816108a29190613bd8565b5050565b5f6108af611bc4565b6001545f540303905090565b600c5f9054906101000a900460ff1681565b823373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461090b5761090a336119ba565b5b610916848484611bcc565b50505050565b5f8060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166103e8601154856109519190613cd4565b61095b9190613d42565b915091509250929050565b600d5481565b600e602052805f5260405f205f915090505481565b610989611bbd565b73ffffffffffffffffffffffffffffffffffffffff166109a7611139565b73ffffffffffffffffffffffffffffffffffffffff16146109fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f490613a26565b60405180910390fd5b6103e8811115610a42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3990613dbc565b60405180910390fd5b8060118190555050565b6daaeb6d7670e522a718067333cd4e81565b823373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610a9c57610a9b336119ba565b5b610aa7848484611bdc565b50505050565b610ab5611bbd565b73ffffffffffffffffffffffffffffffffffffffff16610ad3611139565b73ffffffffffffffffffffffffffffffffffffffff1614610b29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2090613a26565b60405180910390fd5b600c60019054906101000a900460ff1615610b79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7090613e24565b60405180910390fd5b5f8184849050610b899190613cd4565b905061177081610b976108a6565b610ba19190613e42565b1115610be2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd990613ee5565b60405180910390fd5b5f5b84849050811015610c3357610c20858583818110610c0557610c04613f03565b5b9050602002016020810190610c1a91906134db565b84611bfb565b8080610c2b90613f30565b915050610be4565b507f8931881f3c1fcfb595066541b6a8f1f59ea71c49912c521b6799a5733772b4408484905083604051610c68929190613f77565b60405180910390a150505050565b60108054610c83906139ac565b80601f0160208091040260200160405190810160405280929190818152602001828054610caf906139ac565b8015610cfa5780601f10610cd157610100808354040283529160200191610cfa565b820191905f5260205f20905b815481529060010190602001808311610cdd57829003601f168201915b505050505081565b600f8054610d0f906139ac565b80601f0160208091040260200160405190810160405280929190818152602001828054610d3b906139ac565b8015610d865780601f10610d5d57610100808354040283529160200191610d86565b820191905f5260205f20905b815481529060010190602001808311610d6957829003601f168201915b505050505081565b5f610d9882611c18565b5f01519050919050565b610daa611bbd565b73ffffffffffffffffffffffffffffffffffffffff16610dc8611139565b73ffffffffffffffffffffffffffffffffffffffff1614610e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1590613a26565b60405180910390fd5b80600c60016101000a81548160ff02191690831515021790555050565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610ea1576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f015f9054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b610f0d611bbd565b73ffffffffffffffffffffffffffffffffffffffff16610f2b611139565b73ffffffffffffffffffffffffffffffffffffffff1614610f81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7890613a26565b60405180910390fd5b610f8a5f611e94565b565b610f94611bbd565b73ffffffffffffffffffffffffffffffffffffffff16610fb2611139565b73ffffffffffffffffffffffffffffffffffffffff1614611008576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fff90613a26565b60405180910390fd5b80600d8190555050565b61101a611bbd565b73ffffffffffffffffffffffffffffffffffffffff16611038611139565b73ffffffffffffffffffffffffffffffffffffffff161461108e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108590613a26565b60405180910390fd5b80600f908161109d9190613bd8565b5050565b6110a9611bbd565b73ffffffffffffffffffffffffffffffffffffffff166110c7611139565b73ffffffffffffffffffffffffffffffffffffffff161461111d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111490613a26565b60405180910390fd5b80600c5f6101000a81548160ff02191690831515021790555050565b5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611169611bbd565b73ffffffffffffffffffffffffffffffffffffffff16611187611139565b73ffffffffffffffffffffffffffffffffffffffff16146111dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d490613a26565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361124b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112429061400e565b60405180910390fd5b8060125f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606003805461129d906139ac565b80601f01602080910402602001604051908101604052809291908181526020018280546112c9906139ac565b80156113145780601f106112eb57610100808354040283529160200191611314565b820191905f5260205f20905b8154815290600101906020018083116112f757829003601f168201915b5050505050905090565b81611328816119ba565b6113328383611f57565b505050565b600181565b600260095403611381576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137890614076565b60405180910390fd5b6002600981905550600c60019054906101000a900460ff16156113d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d090613e24565b60405180910390fd5b600c5f9054906101000a900460ff1615611428576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141f906140de565b60405180910390fd5b61177060016114356108a6565b61143f9190613e42565b1115611480576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114779061416c565b60405180910390fd5b6001600e5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205460016114cc9190613e42565b111561150d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611504906141fa565b60405180910390fd5b5f3360405160200161151f91906131d9565b604051602081830303815290604052805190602001206040516020016115459190614238565b60405160208183030381529060405280519060200120905061156a82600d54836120c9565b6115a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a09061429c565b60405180910390fd5b6001600e5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546115f69190613e42565b92505081905550611608336001611bfb565b3373ffffffffffffffffffffffffffffffffffffffff167fdaad2e796471df601d12042505b2a806ceb443b41e67b123268a0c7c9e6b0650600160405161164f91906142f3565b60405180910390a250600160098190555050565b833373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146116a1576116a0336119ba565b5b6116ad858585856120df565b5050505050565b60606116bf82611971565b6116fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f59061437c565b60405180910390fd5b5f61170761215b565b90505f8151116117255760405180602001604052805f815250611753565b8061172f846121eb565b601060405160200161174393929190614454565b6040516020818303038152906040525b915050919050565b61177081565b5f60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b600c60019054906101000a900460ff1681565b61180a611bbd565b73ffffffffffffffffffffffffffffffffffffffff16611828611139565b73ffffffffffffffffffffffffffffffffffffffff161461187e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187590613a26565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036118ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e3906144f4565b60405180910390fd5b6118f581611e94565b50565b5f7f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061196a575061196982612344565b5b9050919050565b5f8161197b611bc4565b1115801561198957505f5482105b80156119b3575060045f8381526020019081526020015f205f01601c9054906101000a900460ff16155b9050919050565b5f6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115611ab1576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430836040518363ffffffff1660e01b8152600401611a30929190614512565b602060405180830381865afa158015611a4b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a6f919061454d565b611ab057806040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401611aa791906131d9565b60405180910390fd5b5b50565b5f611abe82610d8e565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611b25576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16611b44611bbd565b73ffffffffffffffffffffffffffffffffffffffff1614158015611b765750611b7481611b6f611bbd565b611761565b155b15611bad576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611bb8838383612425565b505050565b5f33905090565b5f6001905090565b611bd78383836124d4565b505050565b611bf683838360405180602001604052805f815250611663565b505050565b611c14828260405180602001604052805f81525061296a565b5050565b611c20612f8e565b5f82905080611c2d611bc4565b11158015611c3b57505f5481105b15611e5d575f60045f8381526020019081526020015f206040518060600160405290815f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020015f820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020015f8201601c9054906101000a900460ff16151515158152505090508060400151611e5b575f73ffffffffffffffffffffffffffffffffffffffff16815f015173ffffffffffffffffffffffffffffffffffffffff1614611d47578092505050611e8f565b5b600115611e5a5781806001900392505060045f8381526020019081526020015f206040518060600160405290815f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020015f820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020015f8201601c9054906101000a900460ff16151515158152505090505f73ffffffffffffffffffffffffffffffffffffffff16815f015173ffffffffffffffffffffffffffffffffffffffff1614611e55578092505050611e8f565b611d48565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611f5f611bbd565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611fc3576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060075f611fcf611bbd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16612078611bbd565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516120bd9190613079565b60405180910390a35050565b5f826120d5858461297c565b1490509392505050565b6120ea8484846124d4565b6121098373ffffffffffffffffffffffffffffffffffffffff166129d0565b801561211e575061211c848484846129e1565b155b15612155576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6060600f805461216a906139ac565b80601f0160208091040260200160405190810160405280929190818152602001828054612196906139ac565b80156121e15780601f106121b8576101008083540402835291602001916121e1565b820191905f5260205f20905b8154815290600101906020018083116121c457829003601f168201915b5050505050905090565b60605f8203612231576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061233f565b5f8290505f5b5f821461226057808061224990613f30565b915050600a826122599190613d42565b9150612237565b5f8167ffffffffffffffff81111561227b5761227a613262565b5b6040519080825280601f01601f1916602001820160405280156122ad5781602001600182028036833780820191505090505b5090505b5f8514612338576001826122c59190614578565b9150600a856122d491906145ab565b60306122e09190613e42565b60f81b8183815181106122f6576122f5613f03565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600a856123319190613d42565b94506122b1565b8093505050505b919050565b5f7f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061240e57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061241e575061241d82612b2c565b5b9050919050565b8260065f8481526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b5f6124de82611c18565b90508373ffffffffffffffffffffffffffffffffffffffff16815f015173ffffffffffffffffffffffffffffffffffffffff1614612548576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8473ffffffffffffffffffffffffffffffffffffffff16612568611bbd565b73ffffffffffffffffffffffffffffffffffffffff161480612597575061259685612591611bbd565b611761565b5b806125dc57506125a5611bbd565b73ffffffffffffffffffffffffffffffffffffffff166125c484610786565b73ffffffffffffffffffffffffffffffffffffffff16145b905080612615576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361267a576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6126878585856001612b95565b6126925f8487612425565b600160055f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f015f8282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600160055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f015f8282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505f60045f8581526020019081526020015f20905084815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555042815f0160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505f6001850190505f60045f8381526020019081526020015f2090505f73ffffffffffffffffffffffffffffffffffffffff16815f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036128f8575f5482146128f75787815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508460200151815f0160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46129638585856001612b9b565b5050505050565b6129778383836001612ba1565b505050565b5f808290505f5b84518110156129c5576129b0828683815181106129a3576129a2613f03565b5b6020026020010151612f50565b915080806129bd90613f30565b915050612983565b508091505092915050565b5f80823b90505f8111915050919050565b5f8373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612a06611bbd565b8786866040518563ffffffff1660e01b8152600401612a28949392919061462d565b6020604051808303815f875af1925050508015612a6357506040513d601f19601f82011682018060405250810190612a60919061468b565b60015b612ad9573d805f8114612a91576040519150601f19603f3d011682016040523d82523d5f602084013e612a96565b606091505b505f815103612ad1576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b50505050565b50505050565b5f805490505f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603612c0b576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8403612c44576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612c505f868387612b95565b8360055f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f015f8282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055508360055f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f0160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055508460045f8381526020019081526020015f205f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055504260045f8381526020019081526020015f205f0160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505f8190505f8582019050838015612e0a5750612e098773ffffffffffffffffffffffffffffffffffffffff166129d0565b5b15612ecb575b818773ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612e7d5f8884806001019550886129e1565b612eb3576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808203612e1057825f5414612ec6575f80fd5b612f35565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808203612ecc575b815f819055505050612f495f868387612b9b565b5050505050565b5f818310612f6757612f628284612f7a565b612f72565b612f718383612f7a565b5b905092915050565b5f825f528160205260405f20905092915050565b60405180606001604052805f73ffffffffffffffffffffffffffffffffffffffff1681526020015f67ffffffffffffffff1681526020015f151581525090565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61301381612fdf565b811461301d575f80fd5b50565b5f8135905061302e8161300a565b92915050565b5f6020828403121561304957613048612fd7565b5b5f61305684828501613020565b91505092915050565b5f8115159050919050565b6130738161305f565b82525050565b5f60208201905061308c5f83018461306a565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156130c95780820151818401526020810190506130ae565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6130ee82613092565b6130f8818561309c565b93506131088185602086016130ac565b613111816130d4565b840191505092915050565b5f6020820190508181035f83015261313481846130e4565b905092915050565b5f819050919050565b61314e8161313c565b8114613158575f80fd5b50565b5f8135905061316981613145565b92915050565b5f6020828403121561318457613183612fd7565b5b5f6131918482850161315b565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6131c38261319a565b9050919050565b6131d3816131b9565b82525050565b5f6020820190506131ec5f8301846131ca565b92915050565b6131fb816131b9565b8114613205575f80fd5b50565b5f81359050613216816131f2565b92915050565b5f806040838503121561323257613231612fd7565b5b5f61323f85828601613208565b92505060206132508582860161315b565b9150509250929050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b613298826130d4565b810181811067ffffffffffffffff821117156132b7576132b6613262565b5b80604052505050565b5f6132c9612fce565b90506132d5828261328f565b919050565b5f67ffffffffffffffff8211156132f4576132f3613262565b5b6132fd826130d4565b9050602081019050919050565b828183375f83830152505050565b5f61332a613325846132da565b6132c0565b9050828152602081018484840111156133465761334561325e565b5b61335184828561330a565b509392505050565b5f82601f83011261336d5761336c61325a565b5b813561337d848260208601613318565b91505092915050565b5f6020828403121561339b5761339a612fd7565b5b5f82013567ffffffffffffffff8111156133b8576133b7612fdb565b5b6133c484828501613359565b91505092915050565b6133d68161313c565b82525050565b5f6020820190506133ef5f8301846133cd565b92915050565b5f805f6060848603121561340c5761340b612fd7565b5b5f61341986828701613208565b935050602061342a86828701613208565b925050604061343b8682870161315b565b9150509250925092565b5f806040838503121561345b5761345a612fd7565b5b5f6134688582860161315b565b92505060206134798582860161315b565b9150509250929050565b5f6040820190506134965f8301856131ca565b6134a360208301846133cd565b9392505050565b5f819050919050565b6134bc816134aa565b82525050565b5f6020820190506134d55f8301846134b3565b92915050565b5f602082840312156134f0576134ef612fd7565b5b5f6134fd84828501613208565b91505092915050565b5f819050919050565b5f61352961352461351f8461319a565b613506565b61319a565b9050919050565b5f61353a8261350f565b9050919050565b5f61354b82613530565b9050919050565b61355b81613541565b82525050565b5f6020820190506135745f830184613552565b92915050565b5f80fd5b5f80fd5b5f8083601f8401126135975761359661325a565b5b8235905067ffffffffffffffff8111156135b4576135b361357a565b5b6020830191508360208202830111156135d0576135cf61357e565b5b9250929050565b5f805f604084860312156135ee576135ed612fd7565b5b5f84013567ffffffffffffffff81111561360b5761360a612fdb565b5b61361786828701613582565b9350935050602061362a8682870161315b565b9150509250925092565b61363d8161305f565b8114613647575f80fd5b50565b5f8135905061365881613634565b92915050565b5f6020828403121561367357613672612fd7565b5b5f6136808482850161364a565b91505092915050565b613692816134aa565b811461369c575f80fd5b50565b5f813590506136ad81613689565b92915050565b5f602082840312156136c8576136c7612fd7565b5b5f6136d58482850161369f565b91505092915050565b5f80604083850312156136f4576136f3612fd7565b5b5f61370185828601613208565b92505060206137128582860161364a565b9150509250929050565b5f67ffffffffffffffff82111561373657613735613262565b5b602082029050602081019050919050565b5f6137596137548461371c565b6132c0565b9050808382526020820190506020840283018581111561377c5761377b61357e565b5b835b818110156137a55780613791888261369f565b84526020840193505060208101905061377e565b5050509392505050565b5f82601f8301126137c3576137c261325a565b5b81356137d3848260208601613747565b91505092915050565b5f602082840312156137f1576137f0612fd7565b5b5f82013567ffffffffffffffff81111561380e5761380d612fdb565b5b61381a848285016137af565b91505092915050565b5f67ffffffffffffffff82111561383d5761383c613262565b5b613846826130d4565b9050602081019050919050565b5f61386561386084613823565b6132c0565b9050828152602081018484840111156138815761388061325e565b5b61388c84828561330a565b509392505050565b5f82601f8301126138a8576138a761325a565b5b81356138b8848260208601613853565b91505092915050565b5f805f80608085870312156138d9576138d8612fd7565b5b5f6138e687828801613208565b94505060206138f787828801613208565b93505060406139088782880161315b565b925050606085013567ffffffffffffffff81111561392957613928612fdb565b5b61393587828801613894565b91505092959194509250565b5f806040838503121561395757613956612fd7565b5b5f61396485828601613208565b925050602061397585828601613208565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806139c357607f821691505b6020821081036139d6576139d561397f565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613a1060208361309c565b9150613a1b826139dc565b602082019050919050565b5f6020820190508181035f830152613a3d81613a04565b9050919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302613aa07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613a65565b613aaa8683613a65565b95508019841693508086168417925050509392505050565b5f613adc613ad7613ad28461313c565b613506565b61313c565b9050919050565b5f819050919050565b613af583613ac2565b613b09613b0182613ae3565b848454613a71565b825550505050565b5f90565b613b1d613b11565b613b28818484613aec565b505050565b5b81811015613b4b57613b405f82613b15565b600181019050613b2e565b5050565b601f821115613b9057613b6181613a44565b613b6a84613a56565b81016020851015613b79578190505b613b8d613b8585613a56565b830182613b2d565b50505b505050565b5f82821c905092915050565b5f613bb05f1984600802613b95565b1980831691505092915050565b5f613bc88383613ba1565b9150826002028217905092915050565b613be182613092565b67ffffffffffffffff811115613bfa57613bf9613262565b5b613c0482546139ac565b613c0f828285613b4f565b5f60209050601f831160018114613c40575f8415613c2e578287015190505b613c388582613bbd565b865550613c9f565b601f198416613c4e86613a44565b5f5b82811015613c7557848901518255600182019150602085019450602081019050613c50565b86831015613c925784890151613c8e601f891682613ba1565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613cde8261313c565b9150613ce98361313c565b9250828202613cf78161313c565b91508282048414831517613d0e57613d0d613ca7565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613d4c8261313c565b9150613d578361313c565b925082613d6757613d66613d15565b5b828204905092915050565b7f307854616d613a20526f79616c74792066656520746f6f20686967682e0000005f82015250565b5f613da6601d8361309c565b9150613db182613d72565b602082019050919050565b5f6020820190508181035f830152613dd381613d9a565b9050919050565b7f307854616d613a20636f6e7472616374206973207061757365640000000000005f82015250565b5f613e0e601a8361309c565b9150613e1982613dda565b602082019050919050565b5f6020820190508181035f830152613e3b81613e02565b9050919050565b5f613e4c8261313c565b9150613e578361313c565b9250828201905080821115613e6f57613e6e613ca7565b5b92915050565b7f307854616d613a2061697264726f70206d696e74206d6178537570706c7920655f8201527f7863656564656400000000000000000000000000000000000000000000000000602082015250565b5f613ecf60278361309c565b9150613eda82613e75565b604082019050919050565b5f6020820190508181035f830152613efc81613ec3565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f613f3a8261313c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613f6c57613f6b613ca7565b5b600182019050919050565b5f604082019050613f8a5f8301856133cd565b613f9760208301846133cd565b9392505050565b7f307854616d613a20496e76616c696420726563656976657220616464726573735f8201527f2e00000000000000000000000000000000000000000000000000000000000000602082015250565b5f613ff860218361309c565b915061400382613f9e565b604082019050919050565b5f6020820190508181035f83015261402581613fec565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c005f82015250565b5f614060601f8361309c565b915061406b8261402c565b602082019050919050565b5f6020820190508181035f83015261408d81614054565b9050919050565b7f307854616d613a2077686974656c69737453616c6520636c6f736564000000005f82015250565b5f6140c8601c8361309c565b91506140d382614094565b602082019050919050565b5f6020820190508181035f8301526140f5816140bc565b9050919050565b7f307854616d613a207768697465206d696e74206d6178537570706c79206578635f8201527f6565646564000000000000000000000000000000000000000000000000000000602082015250565b5f61415660258361309c565b9150614161826140fc565b604082019050919050565b5f6020820190508181035f8301526141838161414a565b9050919050565b7f307854616d613a20757365722063616e6e6f74206d696e74206d6f72652074685f8201527f656e2031204e4654730000000000000000000000000000000000000000000000602082015250565b5f6141e460298361309c565b91506141ef8261418a565b604082019050919050565b5f6020820190508181035f830152614211816141d8565b9050919050565b5f819050919050565b61423261422d826134aa565b614218565b82525050565b5f6142438284614221565b60208201915081905092915050565b7f307854616d613a20496e76616c69642070726f6f6600000000000000000000005f82015250565b5f61428660158361309c565b915061429182614252565b602082019050919050565b5f6020820190508181035f8301526142b38161427a565b9050919050565b5f819050919050565b5f6142dd6142d86142d3846142ba565b613506565b61313c565b9050919050565b6142ed816142c3565b82525050565b5f6020820190506143065f8301846142e4565b92915050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f5f8201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b5f614366602f8361309c565b91506143718261430c565b604082019050919050565b5f6020820190508181035f8301526143938161435a565b9050919050565b5f81905092915050565b5f6143ae82613092565b6143b8818561439a565b93506143c88185602086016130ac565b80840191505092915050565b5f81546143e0816139ac565b6143ea818661439a565b9450600182165f811461440457600181146144195761444b565b60ff198316865281151582028601935061444b565b61442285613a44565b5f5b8381101561444357815481890152600182019150602081019050614424565b838801955050505b50505092915050565b5f61445f82866143a4565b915061446b82856143a4565b915061447782846143d4565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6144de60268361309c565b91506144e982614484565b604082019050919050565b5f6020820190508181035f83015261450b816144d2565b9050919050565b5f6040820190506145255f8301856131ca565b61453260208301846131ca565b9392505050565b5f8151905061454781613634565b92915050565b5f6020828403121561456257614561612fd7565b5b5f61456f84828501614539565b91505092915050565b5f6145828261313c565b915061458d8361313c565b92508282039050818111156145a5576145a4613ca7565b5b92915050565b5f6145b58261313c565b91506145c08361313c565b9250826145d0576145cf613d15565b5b828206905092915050565b5f81519050919050565b5f82825260208201905092915050565b5f6145ff826145db565b61460981856145e5565b93506146198185602086016130ac565b614622816130d4565b840191505092915050565b5f6080820190506146405f8301876131ca565b61464d60208301866131ca565b61465a60408301856133cd565b818103606083015261466c81846145f5565b905095945050505050565b5f815190506146858161300a565b92915050565b5f602082840312156146a05761469f612fd7565b5b5f6146ad84828501614677565b9150509291505056fea2646970667358221220b2b7899384f99a9c30c8ec73926998485d1d253eb687a92d00dc9dd25b21f78d64736f6c6343000814003368747470733a2f2f636f6d6d6f6e2e6d6a6d6574612e696f2f307854616d612f6e66745f74616d615f