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