0x60806040526108ae60015560006002556000600355660aa87bee5380006004556040518060600160405280603b815260200162002924603b9139600590816200004991906200031d565b5060006006553480156200005c57600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000404565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200012557607f821691505b6020821081036200013b576200013a620000dd565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620001a57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000166565b620001b1868362000166565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620001fe620001f8620001f284620001c9565b620001d3565b620001c9565b9050919050565b6000819050919050565b6200021a83620001dd565b62000232620002298262000205565b84845462000173565b825550505050565b600090565b620002496200023a565b620002568184846200020f565b505050565b5b818110156200027e57620002726000826200023f565b6001810190506200025c565b5050565b601f821115620002cd57620002978162000141565b620002a28462000156565b81016020851015620002b2578190505b620002ca620002c18562000156565b8301826200025b565b50505b505050565b600082821c905092915050565b6000620002f260001984600802620002d2565b1980831691505092915050565b60006200030d8383620002df565b9150826002028217905092915050565b6200032882620000a3565b67ffffffffffffffff811115620003445762000343620000ae565b5b6200035082546200010c565b6200035d82828562000282565b600060209050601f83116001811462000395576000841562000380578287015190505b6200038c8582620002ff565b865550620003fc565b601f198416620003a58662000141565b60005b82811015620003cf57848901518255600182019150602085019450602081019050620003a8565b86831015620003ef5784890151620003eb601f891682620002df565b8355505b6001600288020188555050505b505050505050565b61251080620004146000396000f3fe60806040526004361061014b5760003560e01c806370a08231116100b6578063b88d4fde1161006f578063b88d4fde1461045d578063bf8fbbd214610486578063c87b56dd146104b1578063e5c389cd146104ee578063e985e9c514610517578063ed6661c2146105545761014b565b806370a082311461035a5780638da5cb5b1461039757806395d89b41146103c257806398710d1e146103ed578063a0712d6814610418578063a22cb465146104345761014b565b806332cb6b0c1161010857806332cb6b0c146102725780633ccfd60b1461029d57806342842e0e146102b457806347064d6a146102dd5780635b70ea9f146103065780636352211e1461031d5761014b565b806301ffc9a71461015057806306fdde031461018d578063081812fc146101b8578063095ea7b3146101f557806318160ddd1461021e57806323b872dd14610249575b600080fd5b34801561015c57600080fd5b50610177600480360381019061017291906117a3565b61057f565b60405161018491906117eb565b60405180910390f35b34801561019957600080fd5b506101a2610611565b6040516101af9190611896565b60405180910390f35b3480156101c457600080fd5b506101df60048036038101906101da91906118ee565b61064e565b6040516101ec919061195c565b60405180910390f35b34801561020157600080fd5b5061021c600480360381019061021791906119a3565b6106ca565b005b34801561022a57600080fd5b50610233610843565b60405161024091906119f2565b60405180910390f35b34801561025557600080fd5b50610270600480360381019061026b9190611a0d565b610856565b005b34801561027e57600080fd5b50610287610866565b60405161029491906119f2565b60405180910390f35b3480156102a957600080fd5b506102b261086c565b005b3480156102c057600080fd5b506102db60048036038101906102d69190611a0d565b610913565b005b3480156102e957600080fd5b5061030460048036038101906102ff9190611b95565b610933565b005b34801561031257600080fd5b5061031b61099e565b005b34801561032957600080fd5b50610344600480360381019061033f91906118ee565b610a6d565b604051610351919061195c565b60405180910390f35b34801561036657600080fd5b50610381600480360381019061037c9190611bde565b610a7f565b60405161038e91906119f2565b60405180910390f35b3480156103a357600080fd5b506103ac610b13565b6040516103b9919061195c565b60405180910390f35b3480156103ce57600080fd5b506103d7610b3c565b6040516103e49190611896565b60405180910390f35b3480156103f957600080fd5b50610402610b79565b60405161040f91906119f2565b60405180910390f35b610432600480360381019061042d91906118ee565b610b7f565b005b34801561044057600080fd5b5061045b60048036038101906104569190611c37565b610c97565b005b34801561046957600080fd5b50610484600480360381019061047f9190611d18565b610e0e565b005b34801561049257600080fd5b5061049b610e1f565b6040516104a891906119f2565b60405180910390f35b3480156104bd57600080fd5b506104d860048036038101906104d391906118ee565b610e25565b6040516104e59190611896565b60405180910390f35b3480156104fa57600080fd5b5061051560048036038101906105109190611d9b565b610f46565b005b34801561052357600080fd5b5061053e60048036038101906105399190611e02565b610fc0565b60405161054b91906117eb565b60405180910390f35b34801561056057600080fd5b50610569611054565b60405161057691906119f2565b60405180910390f35b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105da57506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061060a5750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b60606040518060400160405280600d81526020017f48696464656e2057656972646f00000000000000000000000000000000000000815250905090565b60006106598261105a565b61068f576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6009600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006106d58261107b565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361070f57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff1661072e611147565b73ffffffffffffffffffffffffffffffffffffffff16146107915761075a81610755611147565b610fc0565b610790576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826009600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600061084d61114f565b60065403905090565b610861838383611154565b505050565b60015481565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146108c457600080fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561090f573d6000803e3d6000fd5b5050565b61092e83838360405180602001604052806000815250610e0e565b505050565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461098b57600080fd5b806005908161099a919061204e565b5050565b60006109a8611147565b9050600060019050600254816109bc610843565b6109c6919061214f565b1115610a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109fe906121cf565b60405180910390fd5b600354610a13836114ca565b82610a1e919061214f565b1115610a5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a569061223b565b60405180910390fd5b610a698282611521565b5050565b6000610a788261107b565b9050919050565b600080610a8b836116c3565b03610ac2576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600d81526020017f48696464656e2057656972646f00000000000000000000000000000000000000815250905090565b60035481565b6000610b89611147565b905060015482610b97610843565b610ba1919061214f565b1115610be2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd9906122a7565b60405180910390fd5b3460045483610bf191906122c7565b1115610c32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2990612355565b60405180910390fd5b6002610c3d826114ca565b83610c48919061214f565b1115610c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c809061223b565b60405180910390fd5b610c938183611521565b5050565b610c9f611147565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d03576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600a6000610d10611147565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610dbd611147565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610e0291906117eb565b60405180910390a35050565b610e19848484611154565b50505050565b60045481565b6060610e308261105a565b610e66576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060058054610e7590611e71565b80601f0160208091040260200160405190810160405280929190818152602001828054610ea190611e71565b8015610eee5780601f10610ec357610100808354040283529160200191610eee565b820191906000526020600020905b815481529060010190602001808311610ed157829003601f168201915b505050505090506000815103610f135760405180602001604052806000815250610f3e565b80610f1d846116cd565b604051602001610f2e929190612495565b6040516020818303038152906040525b915050919050565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f9e57600080fd5b8360038190555082600481905550816002819055508060018190555050505050565b6000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60025481565b60008161106561114f565b11158015611074575060065482105b9050919050565b6000808290508061108a61114f565b116111105760065481101561110f5760006007600083815260200190815260200160002054905060007c010000000000000000000000000000000000000000000000000000000082160361110d575b600081036111035760076000836001900393508381526020019081526020016000205490506110d9565b8092505050611142565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b600033905090565b600090565b600061115f8261107b565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146111c6576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006009600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008573ffffffffffffffffffffffffffffffffffffffff1661121f611147565b73ffffffffffffffffffffffffffffffffffffffff16148061124e575061124d86611248611147565b610fc0565b5b8061128b575061125c611147565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b9050806112c4576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006112cf836116c3565b1461130b576009600085815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555b600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154600101919050819055507c020000000000000000000000000000000000000000000000000000000060a042901b6113d2876116c3565b1717600760008681526020019081526020016000208190555060007c020000000000000000000000000000000000000000000000000000000084160361145a5760006001850190506000600760008381526020019081526020016000205403611458576006548114611457578360076000838152602001908152602001600020819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46114c28686866001611727565b505050505050565b600067ffffffffffffffff6040600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054901c169050919050565b600060065490506000611533846116c3565b0361156a576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082036115a4576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160406001901b178202600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555060e16116096001841461172d565b901b60a042901b611619856116c3565b171760076000838152602001908152602001600020819055506000819050600083820190505b818060010192508573ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821061163f578160068190555050506116be6000848385611727565b505050565b6000819050919050565b60606080604051019050806040528082600183039250600a81066030018353600a810490505b801561171357600183039250600a81066030018353600a810490506116f3565b508181036020830392508083525050919050565b50505050565b6000819050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6117808161174b565b811461178b57600080fd5b50565b60008135905061179d81611777565b92915050565b6000602082840312156117b9576117b8611741565b5b60006117c78482850161178e565b91505092915050565b60008115159050919050565b6117e5816117d0565b82525050565b600060208201905061180060008301846117dc565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611840578082015181840152602081019050611825565b60008484015250505050565b6000601f19601f8301169050919050565b600061186882611806565b6118728185611811565b9350611882818560208601611822565b61188b8161184c565b840191505092915050565b600060208201905081810360008301526118b0818461185d565b905092915050565b6000819050919050565b6118cb816118b8565b81146118d657600080fd5b50565b6000813590506118e8816118c2565b92915050565b60006020828403121561190457611903611741565b5b6000611912848285016118d9565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006119468261191b565b9050919050565b6119568161193b565b82525050565b6000602082019050611971600083018461194d565b92915050565b6119808161193b565b811461198b57600080fd5b50565b60008135905061199d81611977565b92915050565b600080604083850312156119ba576119b9611741565b5b60006119c88582860161198e565b92505060206119d9858286016118d9565b9150509250929050565b6119ec816118b8565b82525050565b6000602082019050611a0760008301846119e3565b92915050565b600080600060608486031215611a2657611a25611741565b5b6000611a348682870161198e565b9350506020611a458682870161198e565b9250506040611a56868287016118d9565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611aa28261184c565b810181811067ffffffffffffffff82111715611ac157611ac0611a6a565b5b80604052505050565b6000611ad4611737565b9050611ae08282611a99565b919050565b600067ffffffffffffffff821115611b0057611aff611a6a565b5b611b098261184c565b9050602081019050919050565b82818337600083830152505050565b6000611b38611b3384611ae5565b611aca565b905082815260208101848484011115611b5457611b53611a65565b5b611b5f848285611b16565b509392505050565b600082601f830112611b7c57611b7b611a60565b5b8135611b8c848260208601611b25565b91505092915050565b600060208284031215611bab57611baa611741565b5b600082013567ffffffffffffffff811115611bc957611bc8611746565b5b611bd584828501611b67565b91505092915050565b600060208284031215611bf457611bf3611741565b5b6000611c028482850161198e565b91505092915050565b611c14816117d0565b8114611c1f57600080fd5b50565b600081359050611c3181611c0b565b92915050565b60008060408385031215611c4e57611c4d611741565b5b6000611c5c8582860161198e565b9250506020611c6d85828601611c22565b9150509250929050565b600067ffffffffffffffff821115611c9257611c91611a6a565b5b611c9b8261184c565b9050602081019050919050565b6000611cbb611cb684611c77565b611aca565b905082815260208101848484011115611cd757611cd6611a65565b5b611ce2848285611b16565b509392505050565b600082601f830112611cff57611cfe611a60565b5b8135611d0f848260208601611ca8565b91505092915050565b60008060008060808587031215611d3257611d31611741565b5b6000611d408782880161198e565b9450506020611d518782880161198e565b9350506040611d62878288016118d9565b925050606085013567ffffffffffffffff811115611d8357611d82611746565b5b611d8f87828801611cea565b91505092959194509250565b60008060008060808587031215611db557611db4611741565b5b6000611dc3878288016118d9565b9450506020611dd4878288016118d9565b9350506040611de5878288016118d9565b9250506060611df6878288016118d9565b91505092959194509250565b60008060408385031215611e1957611e18611741565b5b6000611e278582860161198e565b9250506020611e388582860161198e565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611e8957607f821691505b602082108103611e9c57611e9b611e42565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302611f047fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611ec7565b611f0e8683611ec7565b95508019841693508086168417925050509392505050565b6000819050919050565b6000611f4b611f46611f41846118b8565b611f26565b6118b8565b9050919050565b6000819050919050565b611f6583611f30565b611f79611f7182611f52565b848454611ed4565b825550505050565b600090565b611f8e611f81565b611f99818484611f5c565b505050565b5b81811015611fbd57611fb2600082611f86565b600181019050611f9f565b5050565b601f82111561200257611fd381611ea2565b611fdc84611eb7565b81016020851015611feb578190505b611fff611ff785611eb7565b830182611f9e565b50505b505050565b600082821c905092915050565b600061202560001984600802612007565b1980831691505092915050565b600061203e8383612014565b9150826002028217905092915050565b61205782611806565b67ffffffffffffffff8111156120705761206f611a6a565b5b61207a8254611e71565b612085828285611fc1565b600060209050601f8311600181146120b857600084156120a6578287015190505b6120b08582612032565b865550612118565b601f1984166120c686611ea2565b60005b828110156120ee578489015182556001820191506020850194506020810190506120c9565b8683101561210b5784890151612107601f891682612014565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061215a826118b8565b9150612165836118b8565b925082820190508082111561217d5761217c612120565b5b92915050565b7f467265656d696e7420536f6c644f757400000000000000000000000000000000600082015250565b60006121b9601083611811565b91506121c482612183565b602082019050919050565b600060208201905081810360008301526121e8816121ac565b9050919050565b7f4d6178207065722057616c6c6574000000000000000000000000000000000000600082015250565b6000612225600e83611811565b9150612230826121ef565b602082019050919050565b6000602082019050818103600083015261225481612218565b9050919050565b7f536f6c644f757400000000000000000000000000000000000000000000000000600082015250565b6000612291600783611811565b915061229c8261225b565b602082019050919050565b600060208201905081810360008301526122c081612284565b9050919050565b60006122d2826118b8565b91506122dd836118b8565b92508282026122eb816118b8565b9150828204841483151761230257612301612120565b5b5092915050565b7f56616c756520746f204c6f770000000000000000000000000000000000000000600082015250565b600061233f600c83611811565b915061234a82612309565b602082019050919050565b6000602082019050818103600083015261236e81612332565b9050919050565b600081905092915050565b7f697066733a2f2f00000000000000000000000000000000000000000000000000600082015250565b60006123b6600783612375565b91506123c182612380565b600782019050919050565b60006123d782611806565b6123e18185612375565b93506123f1818560208601611822565b80840191505092915050565b7f2f00000000000000000000000000000000000000000000000000000000000000600082015250565b6000612433600183612375565b915061243e826123fd565b600182019050919050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b600061247f600583612375565b915061248a82612449565b600582019050919050565b60006124a0826123a9565b91506124ac82856123cc565b91506124b782612426565b91506124c382846123cc565b91506124ce82612472565b9150819050939250505056fea2646970667358221220bc41c8f9383894722c15d64489ca9d29af14752ac1a8fecd1026d3f6f3f8924d64736f6c6343000811003362616679626569686c7134756670696a6f61766c627570693265366c676d7834696b696b6a6b75663233703568346c673669626a346f7a7466636d