60806040523480156200001157600080fd5b5060405162002b4038038062002b4083398181016040528101906200003791906200024e565b828281600090816200004a919062000552565b5080600190816200005c919062000552565b505050806006908162000070919062000552565b5033600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505062000639565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200012482620000d9565b810181811067ffffffffffffffff82111715620001465762000145620000ea565b5b80604052505050565b60006200015b620000bb565b905062000169828262000119565b919050565b600067ffffffffffffffff8211156200018c576200018b620000ea565b5b6200019782620000d9565b9050602081019050919050565b60005b83811015620001c4578082015181840152602081019050620001a7565b60008484015250505050565b6000620001e7620001e1846200016e565b6200014f565b905082815260208101848484011115620002065762000205620000d4565b5b62000213848285620001a4565b509392505050565b600082601f830112620002335762000232620000cf565b5b815162000245848260208601620001d0565b91505092915050565b6000806000606084860312156200026a5762000269620000c5565b5b600084015167ffffffffffffffff8111156200028b576200028a620000ca565b5b62000299868287016200021b565b935050602084015167ffffffffffffffff811115620002bd57620002bc620000ca565b5b620002cb868287016200021b565b925050604084015167ffffffffffffffff811115620002ef57620002ee620000ca565b5b620002fd868287016200021b565b9150509250925092565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200035a57607f821691505b60208210810362000370576200036f62000312565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620003da7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200039b565b620003e686836200039b565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620004336200042d6200042784620003fe565b62000408565b620003fe565b9050919050565b6000819050919050565b6200044f8362000412565b620004676200045e826200043a565b848454620003a8565b825550505050565b600090565b6200047e6200046f565b6200048b81848462000444565b505050565b5b81811015620004b357620004a760008262000474565b60018101905062000491565b5050565b601f8211156200050257620004cc8162000376565b620004d7846200038b565b81016020851015620004e7578190505b620004ff620004f6856200038b565b83018262000490565b50505b505050565b600082821c905092915050565b6000620005276000198460080262000507565b1980831691505092915050565b600062000542838362000514565b9150826002028217905092915050565b6200055d8262000307565b67ffffffffffffffff811115620005795762000578620000ea565b5b62000585825462000341565b62000592828285620004b7565b600060209050601f831160018114620005ca5760008415620005b5578287015190505b620005c1858262000534565b86555062000631565b601f198416620005da8662000376565b60005b828110156200060457848901518255600182019150602085019450602081019050620005dd565b8683101562000624578489015162000620601f89168262000514565b8355505b6001600288020188555050505b505050505050565b6124f780620006496000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636352211e11610097578063a22cb46511610066578063a22cb46514610284578063b88d4fde146102a0578063c87b56dd146102bc578063e985e9c5146102ec576100f5565b80636352211e146101ea57806370a082311461021a578063729ad39e1461024a57806395d89b4114610266576100f5565b8063095ea7b3116100d3578063095ea7b31461017857806318160ddd1461019457806323b872dd146101b257806342842e0e146101ce576100f5565b806301ffc9a7146100fa57806306fdde031461012a578063081812fc14610148575b600080fd5b610114600480360381019061010f9190611673565b61031c565b60405161012191906116bb565b60405180910390f35b6101326103fe565b60405161013f9190611766565b60405180910390f35b610162600480360381019061015d91906117be565b610490565b60405161016f919061182c565b60405180910390f35b610192600480360381019061018d9190611873565b6104d6565b005b61019c6105ed565b6040516101a991906118c2565b60405180910390f35b6101cc60048036038101906101c791906118dd565b6105f7565b005b6101e860048036038101906101e391906118dd565b610657565b005b61020460048036038101906101ff91906117be565b610677565b604051610211919061182c565b60405180910390f35b610234600480360381019061022f9190611930565b6106fd565b60405161024191906118c2565b60405180910390f35b610264600480360381019061025f9190611aa5565b6107b4565b005b61026e6108af565b60405161027b9190611766565b60405180910390f35b61029e60048036038101906102999190611b1a565b610941565b005b6102ba60048036038101906102b59190611c0f565b610957565b005b6102d660048036038101906102d191906117be565b6109b9565b6040516102e39190611766565b60405180910390f35b61030660048036038101906103019190611c92565b610a56565b60405161031391906116bb565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806103e757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806103f757506103f682610aea565b5b9050919050565b60606000805461040d90611d01565b80601f016020809104026020016040519081016040528092919081815260200182805461043990611d01565b80156104865780601f1061045b57610100808354040283529160200191610486565b820191906000526020600020905b81548152906001019060200180831161046957829003601f168201915b5050505050905090565b600061049b82610b54565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006104e182610677565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610551576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161054890611da4565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610570610b9f565b73ffffffffffffffffffffffffffffffffffffffff16148061059f575061059e81610599610b9f565b610a56565b5b6105de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105d590611e36565b60405180910390fd5b6105e88383610ba7565b505050565b6000600854905090565b610608610602610b9f565b82610c60565b610647576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161063e90611ec8565b60405180910390fd5b610652838383610cf5565b505050565b61067283838360405180602001604052806000815250610957565b505050565b60008061068383610fee565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036106f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106eb90611f34565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361076d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076490611fc6565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610844576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083b90612032565b60405180910390fd5b60008151905060005b818110156108915761088683828151811061086b5761086a612052565b5b60200260200101518260085461088191906120b0565b61102b565b80600101905061084d565b5080600860008282546108a491906120b0565b925050819055505050565b6060600180546108be90611d01565b80601f01602080910402602001604051908101604052809291908181526020018280546108ea90611d01565b80156109375780601f1061090c57610100808354040283529160200191610937565b820191906000526020600020905b81548152906001019060200180831161091a57829003601f168201915b5050505050905090565b61095361094c610b9f565b8383611248565b5050565b610968610962610b9f565b83610c60565b6109a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099e90611ec8565b60405180910390fd5b6109b3848484846113b4565b50505050565b60606109c482610b54565b600680546109d190611d01565b80601f01602080910402602001604051908101604052809291908181526020018280546109fd90611d01565b8015610a4a5780601f10610a1f57610100808354040283529160200191610a4a565b820191906000526020600020905b815481529060010190602001808311610a2d57829003601f168201915b50505050509050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b610b5d81611410565b610b9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9390611f34565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16610c1a83610677565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080610c6c83610677565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480610cae5750610cad8185610a56565b5b80610cec57508373ffffffffffffffffffffffffffffffffffffffff16610cd484610490565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16610d1582610677565b73ffffffffffffffffffffffffffffffffffffffff1614610d6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6290612156565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610dda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd1906121e8565b60405180910390fd5b610de78383836001611451565b8273ffffffffffffffffffffffffffffffffffffffff16610e0782610677565b73ffffffffffffffffffffffffffffffffffffffff1614610e5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5490612156565b60405180910390fd5b6004600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4610fe98383836001611457565b505050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361109a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109190612254565b60405180910390fd5b6110a381611410565b156110e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110da906122c0565b60405180910390fd5b6110f1600083836001611451565b6110fa81611410565b1561113a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611131906122c0565b60405180910390fd5b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611244600083836001611457565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036112b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ad9061232c565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516113a791906116bb565b60405180910390a3505050565b6113bf848484610cf5565b6113cb8484848461145d565b61140a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611401906123be565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff1661143283610fee565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b50505050565b50505050565b600061147e8473ffffffffffffffffffffffffffffffffffffffff166115e4565b156115d7578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026114a7610b9f565b8786866040518563ffffffff1660e01b81526004016114c99493929190612433565b6020604051808303816000875af192505050801561150557506040513d601f19601f820116820180604052508101906115029190612494565b60015b611587573d8060008114611535576040519150601f19603f3d011682016040523d82523d6000602084013e61153a565b606091505b50600081510361157f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611576906123be565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506115dc565b600190505b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6116508161161b565b811461165b57600080fd5b50565b60008135905061166d81611647565b92915050565b60006020828403121561168957611688611611565b5b60006116978482850161165e565b91505092915050565b60008115159050919050565b6116b5816116a0565b82525050565b60006020820190506116d060008301846116ac565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156117105780820151818401526020810190506116f5565b60008484015250505050565b6000601f19601f8301169050919050565b6000611738826116d6565b61174281856116e1565b93506117528185602086016116f2565b61175b8161171c565b840191505092915050565b60006020820190508181036000830152611780818461172d565b905092915050565b6000819050919050565b61179b81611788565b81146117a657600080fd5b50565b6000813590506117b881611792565b92915050565b6000602082840312156117d4576117d3611611565b5b60006117e2848285016117a9565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611816826117eb565b9050919050565b6118268161180b565b82525050565b6000602082019050611841600083018461181d565b92915050565b6118508161180b565b811461185b57600080fd5b50565b60008135905061186d81611847565b92915050565b6000806040838503121561188a57611889611611565b5b60006118988582860161185e565b92505060206118a9858286016117a9565b9150509250929050565b6118bc81611788565b82525050565b60006020820190506118d760008301846118b3565b92915050565b6000806000606084860312156118f6576118f5611611565b5b60006119048682870161185e565b93505060206119158682870161185e565b9250506040611926868287016117a9565b9150509250925092565b60006020828403121561194657611945611611565b5b60006119548482850161185e565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61199a8261171c565b810181811067ffffffffffffffff821117156119b9576119b8611962565b5b80604052505050565b60006119cc611607565b90506119d88282611991565b919050565b600067ffffffffffffffff8211156119f8576119f7611962565b5b602082029050602081019050919050565b600080fd5b6000611a21611a1c846119dd565b6119c2565b90508083825260208201905060208402830185811115611a4457611a43611a09565b5b835b81811015611a6d5780611a59888261185e565b845260208401935050602081019050611a46565b5050509392505050565b600082601f830112611a8c57611a8b61195d565b5b8135611a9c848260208601611a0e565b91505092915050565b600060208284031215611abb57611aba611611565b5b600082013567ffffffffffffffff811115611ad957611ad8611616565b5b611ae584828501611a77565b91505092915050565b611af7816116a0565b8114611b0257600080fd5b50565b600081359050611b1481611aee565b92915050565b60008060408385031215611b3157611b30611611565b5b6000611b3f8582860161185e565b9250506020611b5085828601611b05565b9150509250929050565b600080fd5b600067ffffffffffffffff821115611b7a57611b79611962565b5b611b838261171c565b9050602081019050919050565b82818337600083830152505050565b6000611bb2611bad84611b5f565b6119c2565b905082815260208101848484011115611bce57611bcd611b5a565b5b611bd9848285611b90565b509392505050565b600082601f830112611bf657611bf561195d565b5b8135611c06848260208601611b9f565b91505092915050565b60008060008060808587031215611c2957611c28611611565b5b6000611c378782880161185e565b9450506020611c488782880161185e565b9350506040611c59878288016117a9565b925050606085013567ffffffffffffffff811115611c7a57611c79611616565b5b611c8687828801611be1565b91505092959194509250565b60008060408385031215611ca957611ca8611611565b5b6000611cb78582860161185e565b9250506020611cc88582860161185e565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611d1957607f821691505b602082108103611d2c57611d2b611cd2565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000611d8e6021836116e1565b9150611d9982611d32565b604082019050919050565b60006020820190508181036000830152611dbd81611d81565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000602082015250565b6000611e20603d836116e1565b9150611e2b82611dc4565b604082019050919050565b60006020820190508181036000830152611e4f81611e13565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206f7220617070726f76656400000000000000000000000000000000000000602082015250565b6000611eb2602d836116e1565b9150611ebd82611e56565b604082019050919050565b60006020820190508181036000830152611ee181611ea5565b9050919050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b6000611f1e6018836116e1565b9150611f2982611ee8565b602082019050919050565b60006020820190508181036000830152611f4d81611f11565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b6000611fb06029836116e1565b9150611fbb82611f54565b604082019050919050565b60006020820190508181036000830152611fdf81611fa3565b9050919050565b7f4e6f74206f776e65720000000000000000000000000000000000000000000000600082015250565b600061201c6009836116e1565b915061202782611fe6565b602082019050919050565b6000602082019050818103600083015261204b8161200f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006120bb82611788565b91506120c683611788565b92508282019050808211156120de576120dd612081565b5b92915050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b60006121406025836116e1565b915061214b826120e4565b604082019050919050565b6000602082019050818103600083015261216f81612133565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006121d26024836116e1565b91506121dd82612176565b604082019050919050565b60006020820190508181036000830152612201816121c5565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b600061223e6020836116e1565b915061224982612208565b602082019050919050565b6000602082019050818103600083015261226d81612231565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b60006122aa601c836116e1565b91506122b582612274565b602082019050919050565b600060208201905081810360008301526122d98161229d565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006123166019836116e1565b9150612321826122e0565b602082019050919050565b6000602082019050818103600083015261234581612309565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006123a86032836116e1565b91506123b38261234c565b604082019050919050565b600060208201905081810360008301526123d78161239b565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000612405826123de565b61240f81856123e9565b935061241f8185602086016116f2565b6124288161171c565b840191505092915050565b6000608082019050612448600083018761181d565b612455602083018661181d565b61246260408301856118b3565b818103606083015261247481846123fa565b905095945050505050565b60008151905061248e81611647565b92915050565b6000602082840312156124aa576124a9611611565b5b60006124b88482850161247f565b9150509291505056fea26469706673582212200cd9fc902fc0d1e871483ce31e323afc27fc8f5a1e18419573708582c828b64764736f6c63430008110033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000753574f4f4f4f5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000341444400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050697066733a2f2f62616679726569616d63643666726d68776963626332687362757234647635757279657161636335646b777a706e68787268356333683633356f652f6d657461646174612e6a736f6e00000000000000000000000000000000