60806040526000600660006101000a81548160ff0219169083151502179055503480156200002c57600080fd5b506040518060400160405280600d81526020017f5265616c2042616c6c2042726f000000000000000000000000000000000000008152506040518060400160405280600e81526020017fd09ad0bed0bbd0bed0b1d0bed0ba000000000000000000000000000000000000815250620000b9620000ad6200013360201b60201c565b6200013b60201b60201c565b8160079080519060200190620000d1929190620003c4565b508060089080519060200190620000ea929190620003c4565b5050506200012d3362000102620001ff60201b60201c565b600a6200011091906200060e565b63292090806200012191906200065f565b6200020860201b60201c565b62000833565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006012905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200027b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002729062000721565b60405180910390fd5b6200028f60008383620003ba60201b60201c565b8060056000828254620002a3919062000743565b9250508190555080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550630f3eae65640997e6e50902673398bc1d25f112ed64085774394d02028060005260016020526040600020720fffffffffffffffffffffffffffffffffffff815550508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200039a9190620007b1565b60405180910390a3620003b660008383620003bf60201b60201c565b5050565b505050565b505050565b828054620003d290620007fd565b90600052602060002090601f016020900481019282620003f6576000855562000442565b82601f106200041157805160ff191683800117855562000442565b8280016001018555821562000442579182015b828111156200044157825182559160200191906001019062000424565b5b50905062000451919062000455565b5090565b5b808211156200047057600081600090555060010162000456565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156200050257808604811115620004da57620004d962000474565b5b6001851615620004ea5780820291505b8081029050620004fa85620004a3565b9450620004ba565b94509492505050565b6000826200051d5760019050620005f0565b816200052d5760009050620005f0565b8160018114620005465760028114620005515762000587565b6001915050620005f0565b60ff84111562000566576200056562000474565b5b8360020a91508482111562000580576200057f62000474565b5b50620005f0565b5060208310610133831016604e8410600b8410161715620005c15782820a905083811115620005bb57620005ba62000474565b5b620005f0565b620005d08484846001620004b0565b92509050818404811115620005ea57620005e962000474565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b60006200061b82620005f7565b9150620006288362000601565b9250620006577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846200050b565b905092915050565b60006200066c82620005f7565b91506200067983620005f7565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620006b557620006b462000474565b5b828202905092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000709601f83620006c0565b91506200071682620006d1565b602082019050919050565b600060208201905081810360008301526200073c81620006fa565b9050919050565b60006200075082620005f7565b91506200075d83620005f7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000795576200079462000474565b5b828201905092915050565b620007ab81620005f7565b82525050565b6000602082019050620007c86000830184620007a0565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200081657607f821691505b602082108114156200082d576200082c620007ce565b5b50919050565b611e8b80620008436000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806387836194116100b8578063b1d2b72b1161007c578063b1d2b72b14610364578063beabacc814610394578063cbc4b212146103b0578063dd62ed3e146103cc578063f2fde38b146103fc578063f96d54701461041857610137565b806387836194146102ac5780638da5cb5b146102c857806395d89b41146102e6578063a457c2d714610304578063a9059cbb1461033457610137565b8063313ce567116100ff578063313ce567146101f457806339509351146102125780633e22a01b1461024257806370a0823114610272578063715018a6146102a257610137565b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461018a57806323b872dd146101a85780632481940b146101d8575b600080fd5b610144610434565b60405161015191906114a8565b60405180910390f35b610174600480360381019061016f9190611568565b6104c6565b60405161018191906115c3565b60405180910390f35b6101926104e9565b60405161019f91906115ed565b60405180910390f35b6101c260048036038101906101bd9190611608565b6104f3565b6040516101cf91906115c3565b60405180910390f35b6101f260048036038101906101ed91906116c0565b610522565b005b6101fc6105cf565b6040516102099190611729565b60405180910390f35b61022c60048036038101906102279190611568565b6105d8565b60405161023991906115c3565b60405180910390f35b61025c60048036038101906102579190611744565b61060f565b60405161026991906115c3565b60405180910390f35b61028c60048036038101906102879190611744565b610665565b60405161029991906115ed565b60405180910390f35b6102aa6106ae565b005b6102c660048036038101906102c191906116c0565b6106c2565b005b6102d061076f565b6040516102dd9190611780565b60405180910390f35b6102ee610798565b6040516102fb91906114a8565b60405180910390f35b61031e60048036038101906103199190611568565b61082a565b60405161032b91906115c3565b60405180910390f35b61034e60048036038101906103499190611568565b6108a1565b60405161035b91906115c3565b60405180910390f35b61037e60048036038101906103799190611744565b6108c4565b60405161038b91906115c3565b60405180910390f35b6103ae60048036038101906103a99190611608565b61091a565b005b6103ca60048036038101906103c591906116c0565b610984565b005b6103e660048036038101906103e1919061179b565b610a31565b6040516103f391906115ed565b60405180910390f35b61041660048036038101906104119190611744565b610ab8565b005b610432600480360381019061042d91906116c0565b610b3c565b005b6060600780546104439061180a565b80601f016020809104026020016040519081016040528092919081815260200182805461046f9061180a565b80156104bc5780601f10610491576101008083540402835291602001916104bc565b820191906000526020600020905b81548152906001019060200180831161049f57829003601f168201915b5050505050905090565b6000806104d1610be9565b90506104de818585610bf1565b600191505092915050565b6000600554905090565b6000806104fe610be9565b905061050b858285610dbc565b610516858585610e48565b60019150509392505050565b61052a6112c3565b60005b828290508110156105ca576000600260008585858181106105515761055061183c565b5b90506020020160208101906105669190611744565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806105c29061189a565b91505061052d565b505050565b60006012905090565b6000806105e3610be9565b90506106048185856105f58589610a31565b6105ff91906118e3565b610bf1565b600191505092915050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6106b66112c3565b6106c06000611341565b565b6106ca6112c3565b60005b8282905081101561076a576001600360008585858181106106f1576106f061183c565b5b90506020020160208101906107069190611744565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806107629061189a565b9150506106cd565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600880546107a79061180a565b80601f01602080910402602001604051908101604052809291908181526020018280546107d39061180a565b80156108205780601f106107f557610100808354040283529160200191610820565b820191906000526020600020905b81548152906001019060200180831161080357829003601f168201915b5050505050905090565b600080610835610be9565b905060006108438286610a31565b905083811015610888576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f906119ab565b60405180910390fd5b6108958286868403610bf1565b60019250505092915050565b6000806108ac610be9565b90506108b9818585610e48565b600191505092915050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161097791906115ed565b60405180910390a3505050565b61098c6112c3565b60005b82829050811015610a2c576000600360008585858181106109b3576109b261183c565b5b90506020020160208101906109c89190611744565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610a249061189a565b91505061098f565b505050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610ac06112c3565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610b30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2790611a3d565b60405180910390fd5b610b3981611341565b50565b610b446112c3565b60005b82829050811015610be457600160026000858585818110610b6b57610b6a61183c565b5b9050602002016020810190610b809190611744565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610bdc9061189a565b915050610b47565b505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5890611acf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610cd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc890611b61565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610daf91906115ed565b60405180910390a3505050565b6000610dc88484610a31565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610e425781811015610e34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2b90611bcd565b60405180910390fd5b610e418484848403610bf1565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610eb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eaf90611c5f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1f90611cf1565b60405180910390fd5b610f33838383611405565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610fba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb190611d83565b60405180910390fd5b818103600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806110ee5750600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561114a5760011515600660009054906101000a900460ff16151514611149576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114090611dc9565b60405180910390fd5b5b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561124d576000600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516112aa91906115ed565b60405180910390a36112bd84848461140a565b50505050565b6112cb610be9565b73ffffffffffffffffffffffffffffffffffffffff166112e961076f565b73ffffffffffffffffffffffffffffffffffffffff161461133f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133690611e35565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561144957808201518184015260208101905061142e565b83811115611458576000848401525b50505050565b6000601f19601f8301169050919050565b600061147a8261140f565b611484818561141a565b935061149481856020860161142b565b61149d8161145e565b840191505092915050565b600060208201905081810360008301526114c2818461146f565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006114ff826114d4565b9050919050565b61150f816114f4565b811461151a57600080fd5b50565b60008135905061152c81611506565b92915050565b6000819050919050565b61154581611532565b811461155057600080fd5b50565b6000813590506115628161153c565b92915050565b6000806040838503121561157f5761157e6114ca565b5b600061158d8582860161151d565b925050602061159e85828601611553565b9150509250929050565b60008115159050919050565b6115bd816115a8565b82525050565b60006020820190506115d860008301846115b4565b92915050565b6115e781611532565b82525050565b600060208201905061160260008301846115de565b92915050565b600080600060608486031215611621576116206114ca565b5b600061162f8682870161151d565b93505060206116408682870161151d565b925050604061165186828701611553565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f8401126116805761167f61165b565b5b8235905067ffffffffffffffff81111561169d5761169c611660565b5b6020830191508360208202830111156116b9576116b8611665565b5b9250929050565b600080602083850312156116d7576116d66114ca565b5b600083013567ffffffffffffffff8111156116f5576116f46114cf565b5b6117018582860161166a565b92509250509250929050565b600060ff82169050919050565b6117238161170d565b82525050565b600060208201905061173e600083018461171a565b92915050565b60006020828403121561175a576117596114ca565b5b60006117688482850161151d565b91505092915050565b61177a816114f4565b82525050565b60006020820190506117956000830184611771565b92915050565b600080604083850312156117b2576117b16114ca565b5b60006117c08582860161151d565b92505060206117d18582860161151d565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061182257607f821691505b60208210811415611836576118356117db565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006118a582611532565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156118d8576118d761186b565b5b600182019050919050565b60006118ee82611532565b91506118f983611532565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561192e5761192d61186b565b5b828201905092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061199560258361141a565b91506119a082611939565b604082019050919050565b600060208201905081810360008301526119c481611988565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000611a2760268361141a565b9150611a32826119cb565b604082019050919050565b60006020820190508181036000830152611a5681611a1a565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000611ab960248361141a565b9150611ac482611a5d565b604082019050919050565b60006020820190508181036000830152611ae881611aac565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000611b4b60228361141a565b9150611b5682611aef565b604082019050919050565b60006020820190508181036000830152611b7a81611b3e565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000611bb7601d8361141a565b9150611bc282611b81565b602082019050919050565b60006020820190508181036000830152611be681611baa565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000611c4960258361141a565b9150611c5482611bed565b604082019050919050565b60006020820190508181036000830152611c7881611c3c565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000611cdb60238361141a565b9150611ce682611c7f565b604082019050919050565b60006020820190508181036000830152611d0a81611cce565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000611d6d60268361141a565b9150611d7882611d11565b604082019050919050565b60006020820190508181036000830152611d9c81611d60565b9050919050565b50565b6000611db360008361141a565b9150611dbe82611da3565b600082019050919050565b60006020820190508181036000830152611de281611da6565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611e1f60208361141a565b9150611e2a82611de9565b602082019050919050565b60006020820190508181036000830152611e4e81611e12565b905091905056fea2646970667358221220ad4a938e7185a81688642b9dc006e94c5001a3f2a73bf02faa597907ed8ee7dd64736f6c63430008090033