text:
#ifndef PARTFINDER_H
#define PARTFINDER_H

#include <vector>
#include <map>
#ifdef _MSC_VER
#include <msvc/stdint.h>
#else
#include <stdint.h>
#endif //_MSC_VER

#include "Clause.h"

namespace MINISAT
{
using namespace MINISAT;

class Solver;

using std::map;
using std::vector;
using std::pair;

class PartFinder {

    public:
        PartFinder(Solver& solver);
        const bool findParts();

        const map<uint32_t, vector<Var> >& getReverseTable() const; // part->var
        const uint32_t getVarPart(const Var var) const;
        const vector<uint32_t>& getTable() const; //var -> part
        const vector<Var>& getPartVars(const uint32_t part);

    private:
        const uint setParts();
        template<class T>
        void addToPart(const vec<T*>& cs);

        struct mysorter
        {
            bool operator () (const pair<uint, uint>& left, const pair<uint, uint>& right)
            {
                return left.second < right.second;
            }
        };

        //const bool findParts(vector<Var>& xorFingerprintInMatrix, vector<XorClause*>& xorsInMatrix);
        template<class T>
        void calcIn(const vec<T*>& cs, vector<uint>& numClauseInPart, vector<uint>& sumLitsInPart);

        map<uint32_t, vector<Var> > reverseTable; //part -> vars
        vector<uint32_t> table; //var -> part
        uint32_t part_no;

        Solver& solver;
};

inline const map<uint32_t, vector<Var> >& PartFinder::getReverseTable() const
{
    return reverseTable;
}

inline const vector<Var>& PartFinder::getTable() const
{
    return table;
}

inline const uint32_t PartFinder::getVarPart(const Var var) const
{
    return table[var];
}

inline const vector<Var>& PartFinder::getPartVars(const uint32_t part)
{
    return reverseTable[part];
}

}; //NAMESPACE MINISAT

#endif //PARTFINDER_H

redpajama_set_name: RedPajamaGithub


text:
//
//  UIImage+PLSClip.h
//  PLShortVideoKit
//
//  Created by suntongmian on 2017/5/25.
//  Copyright © 2017年 Pili Engineering, Qiniu Inc. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface UIImage (PLSClip)

/**
 *  裁剪图片
 *
 *  @param orginalRect     原始图片大小
 *  @param clipRect        需要裁剪成的图片大小
 *  @param imageBackBlock  完成裁剪后的回调
 */
- (void)imageOrginalRect:(CGRect)orginalRect clipRect:(CGRect)clipRect completeBlock:(void (^)(UIImage *))imageBackBlock;

+ (UIImage *)scaleImage:(UIImage *)image maxDataSize:(NSUInteger)dataSize;

@end


text:
'use strict';

Object.defineProperty(exports, "__esModule", {
  value: true
});

var _extends2 = require('babel-runtime/helpers/extends');

var _extends3 = _interopRequireDefault(_extends2);

var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');

var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);

var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');

var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);

var _inherits2 = require('babel-runtime/helpers/inherits');

var _inherits3 = _interopRequireDefault(_inherits2);

var _react = require('react');

var _react2 = _interopRequireDefault(_react);

var _reactDom = require('react-dom');

var _reactDom2 = _interopRequireDefault(_reactDom);

var _util = require('./util');

var _styleUtils = require('style-utils');

var _TimeLine = require('./TimeLine');

var _TimeLine2 = _interopRequireDefault(_TimeLine);

var _ticker = require('./ticker');

var _ticker2 = _interopRequireDefault(_ticker);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }

function noop() {}

var perFrame = Math.round(1000 / 60);

var TweenOne = function (_Component) {
  (0, _inherits3["default"])(TweenOne, _Component);

  function TweenOne() {
    (0, _classCallCheck3["default"])(this, TweenOne);

    var _this = (0, _possibleConstructorReturn3["default"])(this, _Component.apply(this, arguments));

    _this.restart = function () {
      _this.startMoment = _this.timeLine.progressTime;
      _this.startFrame = _ticker2["default"].frame;
      _this.play();
    };

    _this.start = function () {
      _this.updateAnim = null;
      var props = _this.props;
      if (props.animation && Object.keys(props.animation).length) {
        _this.timeLine = new _TimeLine2["default"](_this.dom, (0, _util.dataToArray)(props.animation), { attr: props.attr, willChange: props.willChange });
        // 预先注册 raf, 初始动画数值。
        _this.raf();
        // 开始动画
        _this.play();
      }
    };

    _this.play = function () {
      _this.cancelRequestAnimationFrame();
      if (_this.paused) {
        return;
      }
      _this.rafID = _ticker2["default"].add(_this.raf);
    };

    _this.updateAnimFunc = function () {
      _this.cancelRequestAnimationFrame();
      _this.startFrame = _ticker2["default"].frame;
      if (_this.updateAnim === 'update') {
        if (_this.props.resetStyleBool && _this.timeLine) {
          _this.timeLine.resetDefaultStyle();
        }
        _this.startMoment = 0;
      }
    };

    _this.frame = function () {
      var moment = (_ticker2["default"].frame - _this.startFrame) * perFrame + _this.startMoment;
      if (_this.reverse) {
        moment = (_this.startMoment || 0) - (_ticker2["default"].frame - _this.startFrame) * perFrame;
      }
      moment = moment > _this.timeLine.totalTime ? _this.timeLine.totalTime : moment;
      moment = moment <= 0 ? 0 : moment;
      if (moment < _this.moment && !_this.reverse) {
        _this.timeLine.resetDefaultStyle();
      }
      _this.moment = moment;
      _this.timeLine.onChange = _this.onChange;
      _this.timeLine.frame(moment);
    };

    _this.raf = function () {
      _this.frame();
      if (_this.updateAnim) {
        if (_this.updateStartStyle) {
          _this.timeLine.reStart(_this.props.style);
        }
        _this.updateAnimFunc();
        _this.start();
      }
      if (_this.moment >= _this.timeLine.totalTime && !_this.reverse || _this.paused || _this.reverse && _this.moment === 0) {
        return _this.cancelRequestAnimationFrame();
      }
    };

    _this.cancelRequestAnimationFrame = function () {
      _ticker2["default"].clear(_this.rafID);
      _this.rafID = -1;
    };

    _this.rafID = -1;
    _this.moment = _this.props.moment || 0;
    _this.startMoment = _this.props.moment || 0;
    _this.startFrame = _ticker2["default"].frame;
    _this.paused = _this.props.paused;
    _this.reverse = _this.props.reverse;
    _this.onChange = _this.props.onChange;
    _this.newMomentAnim = false;
    _this.updateAnim = null;
    return _this;
  }

  TweenOne.prototype.componentDidMount = function componentDidMount() {
    this.dom = _reactDom2["default"].findDOMNode(this);
    this.start();
  };

  TweenOne.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {
    var _this2 = this;

    if (nextProps.resetStyleBool && this.timeLine && this.rafID === -1) {
      this.timeLine.resetDefaultStyle();
    }
    this.onChange = nextProps.onChange;
    // 跳帧事件 moment;
    var newMoment = nextProps.moment;
    this.newMomentAnim = false;
    if (typeof newMoment === 'number' && newMoment !== this.moment) {
      this.startMoment = newMoment;
      this.startFrame = _ticker2["default"].frame;
      if (this.rafID === -1 && !nextProps.paused) {
        this.timeLine.resetAnimData();
        var style = nextProps.style;
        this.dom.setAttribute('style', '');
        Object.keys(style).forEach(function (key) {
          _this2.dom.style[key] = (0, _styleUtils.stylesToCss)(key, style[key]);
        });
        this.play();
      } else {
        this.newMomentAnim = true;
      }
    }
    // 动画处理
    var newAnimation = nextProps.animation;
    var currentAnimation = this.props.animation;
    var equal = (0, _util.objectEqual)(currentAnimation, newAnimation);
    var styleEqual = (0, _util.objectEqual)(this.props.style, nextProps.style);
    // 如果 animation 不同, 在下一帧重新动画
    if (!equal) {
      if (this.rafID !== -1) {
        this.updateAnim = 'update';
      } else if (nextProps.updateReStart) {
        this.startFrame = _ticker2["default"].frame;
        this.updateAnim = 'start';
      }
    }

    if (!styleEqual) {
      // 在动画时更改了 style, 作为更改开始数值。
      if (this.rafID !== -1) {
        this.updateStartStyle = true;
      }
    }

    // 暂停倒放
    if (this.paused !== nextProps.paused || this.reverse !== nextProps.reverse) {
      this.paused = nextProps.paused;
      this.reverse = nextProps.reverse;
      if (this.paused) {
        this.cancelRequestAnimationFrame();
      } else {
        if (this.reverse && nextProps.reverseDelay) {
          this.cancelRequestAnimationFrame();
          _ticker2["default"].timeout(this.restart, nextProps.reverseDelay);
        } else {
          this.restart();
        }
      }
    }
  };

  TweenOne.prototype.componentDidUpdate = function componentDidUpdate() {
    if (this.updateStartStyle && !this.updateAnim) {
      this.timeLine.reStart(this.props.style);
      this.updateStartStyle = false;
    }

    if (this.newMomentAnim) {
      this.raf();
    }

    // 样式更新了后再执行动画;
    if (this.updateAnim === 'start') {
      this.start();
    }
  };

  TweenOne.prototype.componentWillUnmount = function componentWillUnmount() {
    this.cancelRequestAnimationFrame();
  };

  TweenOne.prototype.render = function render() {
    var props = (0, _extends3["default"])({}, this.props);
    ['animation', 'component', 'reverseDelay', 'attr', 'paused', 'reverse', 'moment', 'resetStyleBool', 'updateReStart', 'willChange'].forEach(function (key) {
      return delete props[key];
    });
    props.style = (0, _extends3["default"])({}, this.props.style);
    Object.keys(props.style).forEach(function (p) {
      if (p.match(/filter/i)) {
        ['Webkit', 'Moz', 'Ms', 'ms'].forEach(function (prefix) {
          return props.style[prefix + 'Filter'] = props.style[p];
        });
      }
    });
    props.component = typeof props.component === 'function' ? this.props.componentReplace : props.component;
    if (!props.component) {
      delete props.component;
    }
    return _react2["default"].createElement(this.props.component, props);
  };

  return TweenOne;
}(_react.Component);

var objectOrArray = _react.PropTypes.oneOfType([_react.PropTypes.object, _react.PropTypes.array]);

TweenOne.propTypes = {
  component: _react.PropTypes.any,
  componentReplace: _react.PropTypes.string,
  animation: objectOrArray,
  children: _react.PropTypes.any,
  style: _react.PropTypes.object,
  paused: _react.PropTypes.bool,
  reverse: _react.PropTypes.bool,
  reverseDelay: _react.PropTypes.number,
  moment: _react.PropTypes.number,
  attr: _react.PropTypes.string,
  willChange: _react.PropTypes.bool,
  onChange: _react.PropTypes.func,
  resetStyleBool: _react.PropTypes.bool,
  updateReStart: _react.PropTypes.bool
};

TweenOne.defaultProps = {
  component: 'div',
  reverseDelay: 0,
  attr: 'style',
  onChange: noop,
  willChange: true,
  updateReStart: true
};
exports["default"] = TweenOne;
module.exports = exports['default'];


text:
require 'fuzzbert'

fuzz "Web App" do
  deploy do |data|
    #send JSON data via HTTP
  end

  data "mutated data" do
    #in practice, choose a moderately sized value that is generally accepted by the target
    m = FuzzBert::Mutator.new '{ user: { id: 42, name: "FuzzBert" }'
    m.generator
  end
end


text:
<!doctype html>

    <title>Touch swipe example</title>

This example is using the Hammer.js lib to provide the swipe gesture support.


text:
'use strict'

const leveljs = require('level-js')
const memdown = require('memdown')
const encode = require('encoding-down')
const levelup = require('levelup')
const levelTest = require('../')
const suite = require('./suite')

suite.args(levelTest(), leveljs)
suite.args(levelTest({ mem: true }), memdown)

// Custom stores
suite.args(levelTest(memdown, { mem: true }), memdown)
suite.args(levelTest(leveljs), leveljs)

// Without encoding-down or levelup
suite.customLayers(levelTest({ mem: true, layers: [] }), memdown, memdown, 'value')
suite.customLayers(levelTest(leveljs, { layers: [] }), leveljs, leveljs, 'value')
suite.customLayers(levelTest({ layers: [encode] }), leveljs, encode, 'value')
suite.customLayers(levelTest({ layers: [encode, levelup] }), leveljs, levelup, 'value')
suite.customLayers(levelTest(memdown, { layers: [levelup], mem: true }), memdown, levelup, 'value')
suite.customLayers(levelTest(memdown, { layers: [encode, { valueEncoding: 'json' }] }), memdown, encode, '"value"')

suite.options(levelTest)

// Test parity with level(-mem)
suite.level(levelTest(), {
  skipErrorIfExistsTest: true,
  skipRepairTest: true,
  skipDestroyTest: true
})

suite.level(levelTest({ mem: true }), {
  nonPersistent: true,
  skipErrorIfExistsTest: true,
  skipRepairTest: true,
  skipDestroyTest: true
})


text:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;

// The Settings Flyout item template is documented at http://go.microsoft.com/fwlink/?LinkId=273769

namespace Conqueror
{
    public sealed partial class DonateFlyout : SettingsFlyout
    {
        public DonateFlyout()
        {
            this.InitializeComponent();
        }

        private void OnDonate(object sender, RoutedEventArgs e)
        {
            Windows.System.Launcher.LaunchUriAsync(new Uri("https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=UB5ACWZVSHMUA&lc=US&item_name=Conqueror%20for%20Windows%208&item_number=ConquerorForWindows8&currency_code=USD&bn=PP%2dDonationsBF%3abtn_donateCC_LG%2egif%3aNonHosted"));
        }

        private void OnReview(object sender, RoutedEventArgs e)
        {
            Windows.System.Launcher.LaunchUriAsync(new Uri("ms-windows-store:REVIEW?PFN=35457SamuelWronski.Conqueror_rst4xp8zcmeb4"));
        }
    }
}


text:
ACCEPTED

#### According to
Index Fungorum

#### Published in
null

#### Original name
Puccinia stonemaniae Syd. & P. Syd.

### Remarks
null


text:
import json
import logging
import OpenSSL
import os

import acme.client as acme_client

from certbot.client import Client, register
from certbot.configuration import NamespaceConfig
from certbot.account import AccountMemoryStorage
from certbot import crypto_util
from acme import jose
from acme.jose.jwk import JWKRSA
from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.backends import default_backend

import zope.component

from rpaas.ssl_plugins import BaseSSLPlugin
from le_authenticator import RpaasLeAuthenticator

logger = logging.getLogger(__name__)

class LE(BaseSSLPlugin):

    def __init__(self, domain, email, instance_name, consul_manager=None):
        self.domain = str(domain)
        self.email = str(email)
        self.instance_name = str(instance_name)
        self.consul_manager = consul_manager

    def upload_csr(self, csr=None):
        return None

    def download_crt(self, id=None):
        try:
            crt, chain, key = _main([self.domain], self.email, self.instance_name,
                                    consul_manager=self.consul_manager)
            return json.dumps({'crt': crt, 'chain': chain, 'key': key})
        finally:
            self.consul_manager.remove_location(self.instance_name, "/acme-validate")

    def revoke(self):
        cert, key = self.consul_manager.get_certificate(self.instance_name)
        return _revoke(key, cert)

class ConfigNamespace(object):
    def __init__(self, email, domains):
        self.server = os.environ.get("RPAAS_PLUGIN_LE_URL",
                                     "https://acme-v01.api.letsencrypt.org/directory")
        self.config_dir = './le/conf'
        self.work_dir = './le/work'
        self.http01_port = None
        self.tls_sni_01_port = 5001
        self.email = email
        self.domains = domains
        self.rsa_key_size = 2048
        self.no_verify_ssl = False
        self.key_dir = './le/key'
        self.accounts_dir = './le/account'
        self.backup_dir = './le/bkp'
        self.csr_dir = './le/csr'
        self.in_progress_dir = './le/progress'
        self.temp_checkpoint_dir = './le/tmp'
        self.renewer_config_file = './le/renew'
        self.strict_permissions = False
        self.logs_dir = './le/logs'
        self.user_agent = 'rpaas'
        self.pref_challs = []
        self.allow_subset_of_names = False
        self.must_staple = False

def _main(domains=[], email=None, instance_name="", consul_manager=None):
    ns = ConfigNamespace(email, domains)
    config = NamespaceConfig(ns)
    zope.component.provideUtility(config)

    ams = AccountMemoryStorage()
    acc, acme = register(config, ams)

    authenticator = RpaasLeAuthenticator(instance_name, config=config, name='',
                                         consul_manager=consul_manager)
    installer = None
    lec = Client(config, acc, authenticator, installer, acme)
    certr, chain, key, _ = lec.obtain_certificate(domains)
    return (
        OpenSSL.crypto.dump_certificate(OpenSSL.crypto.FILETYPE_PEM, certr.body),
        crypto_util.dump_pyopenssl_chain(chain),
        key.pem,
    )

def _revoke(rawkey, rawcert):
    ns = ConfigNamespace(None)
    acme = acme_client.Client(ns.server, key=JWKRSA(
        key=serialization.load_pem_private_key(
            rawkey, password=None, backend=default_backend())))
    acme.revoke(jose.ComparableX509(OpenSSL.crypto.load_certificate(
                OpenSSL.crypto.FILETYPE_PEM, rawcert)))


text:
#pragma once
#include <aws/opsworks/OpsWorks_EXPORTS.h>
#include <aws/opsworks/OpsWorksRequest.h>
#include <aws/core/utils/memory/stl/AWSString.h>
#include <aws/core/utils/memory/stl/AWSMap.h>
#include <aws/opsworks/model/StackConfigurationManager.h>
#include <aws/opsworks/model/ChefConfiguration.h>
#include <aws/opsworks/model/Source.h>
#include <aws/core/utils/memory/stl/AWSVector.h>
#include <aws/opsworks/model/RootDeviceType.h>
#include <aws/opsworks/model/StackAttributesKeys.h>

namespace Aws
{
namespace OpsWorks
{
namespace Model
{

  /**
   */
  class AWS_OPSWORKS_API CloneStackRequest : public OpsWorksRequest
  {
  public:
    CloneStackRequest();
    Aws::String SerializePayload() const override;

    Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;

    /**
     *
The source stack ID.

     */
    inline const Aws::String& GetSourceStackId() const{ return m_sourceStackId; }

    /**
     *
The source stack ID.

     */
    inline void SetSourceStackId(const Aws::String& value) { m_sourceStackIdHasBeenSet = true; m_sourceStackId = value; }

    /**
     *
The source stack ID.

     */
    inline void SetSourceStackId(Aws::String&& value) { m_sourceStackIdHasBeenSet = true; m_sourceStackId = value; }

    /**
     *
The source stack ID.

     */
    inline void SetSourceStackId(const char* value) { m_sourceStackIdHasBeenSet = true; m_sourceStackId.assign(value); }

    /**
     *
The source stack ID.

     */
    inline CloneStackRequest& WithSourceStackId(const Aws::String& value) { SetSourceStackId(value); return *this;}

    /**
     *
The source stack ID.

     */
    inline CloneStackRequest& WithSourceStackId(Aws::String&& value) { SetSourceStackId(value); return *this;}

    /**
     *
The source stack ID.

     */
    inline CloneStackRequest& WithSourceStackId(const char* value) { SetSourceStackId(value); return *this;}

    /**
     *
The cloned stack name.

     */
    inline const Aws::String& GetName() const{ return m_name; }

    /**
     *
The cloned stack name.

     */
    inline void SetName(const Aws::String& value) { m_nameHasBeenSet = true; m_name = value; }

    /**
     *
The cloned stack name.

     */
    inline void SetName(Aws::String&& value) { m_nameHasBeenSet = true; m_name = value; }

    /**
     *
The cloned stack name.

     */
    inline void SetName(const char* value) { m_nameHasBeenSet = true; m_name.assign(value); }

    /**
     *
The cloned stack name.

     */
    inline CloneStackRequest& WithName(const Aws::String& value) { SetName(value); return *this;}

    /**
     *
The cloned stack name.

     */
    inline CloneStackRequest& WithName(Aws::String&& value) { SetName(value); return *this;}

    /**
     *
The cloned stack name.

     */
    inline CloneStackRequest& WithName(const char* value) { SetName(value); return *this;}

    /**
     *
The cloned stack AWS region, such as "ap-northeast-2". For more information
     * about AWS regions, see Regions and
     * Endpoints.

     */
    inline const Aws::String& GetRegion() const{ return m_region; }

    /**
     *
The cloned stack AWS region, such as "ap-northeast-2". For more information
     * about AWS regions, see Regions and
     * Endpoints.

     */
    inline void SetRegion(const Aws::String& value) { m_regionHasBeenSet = true; m_region = value; }

    /**
     *
The cloned stack AWS region, such as "ap-northeast-2". For more information
     * about AWS regions, see Regions and
     * Endpoints.

     */
    inline void SetRegion(Aws::String&& value) { m_regionHasBeenSet = true; m_region = value; }

    /**
     *
The cloned stack AWS region, such as "ap-northeast-2". For more information
     * about AWS regions, see Regions and
     * Endpoints.

     */
    inline void SetRegion(const char* value) { m_regionHasBeenSet = true; m_region.assign(value); }

    /**
     *
The cloned stack AWS region, such as "ap-northeast-2". For more information
     * about AWS regions, see Regions and
     * Endpoints.

     */
    inline CloneStackRequest& WithRegion(const Aws::String& value) { SetRegion(value); return *this;}

    /**
     *
The cloned stack AWS region, such as "ap-northeast-2". For more information
     * about AWS regions, see Regions and
     * Endpoints.

     */
    inline CloneStackRequest& WithRegion(Aws::String&& value) { SetRegion(value); return *this;}

    /**
     *
The cloned stack AWS region, such as "ap-northeast-2". For more information
     * about AWS regions, see Regions and
     * Endpoints.

     */
    inline CloneStackRequest& WithRegion(const char* value) { SetRegion(value); return *this;}

    /**
     *
The ID of the VPC that the cloned stack is to be launched into. It must be in
     * the specified region. All instances are launched into this VPC, and you cannot
     * change the ID later.

If your account supports EC2 Classic, the
     * default value is no VPC.

If your account does not support EC2
     * Classic, the default value is the default VPC for the specified region.

     *

If the VPC ID corresponds to a default VPC and you have specified
     * either the DefaultAvailabilityZone or the
     * DefaultSubnetId parameter only, AWS OpsWorks infers the value of
     * the other parameter. If you specify neither parameter, AWS OpsWorks sets these
     * parameters to the first valid Availability Zone for the specified region and the
     * corresponding default VPC subnet ID, respectively.

If you specify a
     * nondefault VPC ID, note the following:

It must belong to a VPC
     * in your account that is in the specified region.

You must
     * specify a value for DefaultSubnetId.

For more
     * information on how to use AWS OpsWorks with a VPC, see Running
     * a Stack in a VPC. For more information on default VPC and EC2 Classic, see
     * Supported
     * Platforms.

     */
    inline const Aws::String& GetVpcId() const{ return m_vpcId; }

    /**
     *
The ID of the VPC that the cloned stack is to be launched into. It must be in
     * the specified region. All instances are launched into this VPC, and you cannot
     * change the ID later.

If your account supports EC2 Classic, the
     * default value is no VPC.

If your account does not support EC2
     * Classic, the default value is the default VPC for the specified region.

     *

If the VPC ID corresponds to a default VPC and you have specified
     * either the DefaultAvailabilityZone or the
     * DefaultSubnetId parameter only, AWS OpsWorks infers the value of
     * the other parameter. If you specify neither parameter, AWS OpsWorks sets these
     * parameters to the first valid Availability Zone for the specified region and the
     * corresponding default VPC subnet ID, respectively.

If you specify a
     * nondefault VPC ID, note the following:

It must belong to a VPC
     * in your account that is in the specified region.

You must
     * specify a value for DefaultSubnetId.

For more
     * information on how to use AWS OpsWorks with a VPC, see Running
     * a Stack in a VPC. For more information on default VPC and EC2 Classic, see
     * Supported
     * Platforms.

     */
    inline void SetVpcId(const Aws::String& value) { m_vpcIdHasBeenSet = true; m_vpcId = value; }

    /**
     *
The ID of the VPC that the cloned stack is to be launched into. It must be in
     * the specified region. All instances are launched into this VPC, and you cannot
     * change the ID later.

If your account supports EC2 Classic, the
     * default value is no VPC.

If your account does not support EC2
     * Classic, the default value is the default VPC for the specified region.

     *

If the VPC ID corresponds to a default VPC and you have specified
     * either the DefaultAvailabilityZone or the
     * DefaultSubnetId parameter only, AWS OpsWorks infers the value of
     * the other parameter. If you specify neither parameter, AWS OpsWorks sets these
     * parameters to the first valid Availability Zone for the specified region and the
     * corresponding default VPC subnet ID, respectively.

If you specify a
     * nondefault VPC ID, note the following:

It must belong to a VPC
     * in your account that is in the specified region.

You must
     * specify a value for DefaultSubnetId.

For more
     * information on how to use AWS OpsWorks with a VPC, see Running
     * a Stack in a VPC. For more information on default VPC and EC2 Classic, see
     * Supported
     * Platforms.

     */
    inline void SetVpcId(Aws::String&& value) { m_vpcIdHasBeenSet = true; m_vpcId = value; }

    /**
     *
The ID of the VPC that the cloned stack is to be launched into. It must be in
     * the specified region. All instances are launched into this VPC, and you cannot
     * change the ID later.

If your account supports EC2 Classic, the
     * default value is no VPC.

If your account does not support EC2
     * Classic, the default value is the default VPC for the specified region.

     *

If the VPC ID corresponds to a default VPC and you have specified
     * either the DefaultAvailabilityZone or the
     * DefaultSubnetId parameter only, AWS OpsWorks infers the value of
     * the other parameter. If you specify neither parameter, AWS OpsWorks sets these
     * parameters to the first valid Availability Zone for the specified region and the
     * corresponding default VPC subnet ID, respectively.

If you specify a
     * nondefault VPC ID, note the following:

It must belong to a VPC
     * in your account that is in the specified region.

You must
     * specify a value for DefaultSubnetId.

For more
     * information on how to use AWS OpsWorks with a VPC, see Running
     * a Stack in a VPC. For more information on default VPC and EC2 Classic, see
     * Supported
     * Platforms.

     */
    inline void SetVpcId(const char* value) { m_vpcIdHasBeenSet = true; m_vpcId.assign(value); }

    /**
     *
The ID of the VPC that the cloned stack is to be launched into. It must be in
     * the specified region. All instances are launched into this VPC, and you cannot
     * change the ID later.

If your account supports EC2 Classic, the
     * default value is no VPC.

If your account does not support EC2
     * Classic, the default value is the default VPC for the specified region.

     *

If the VPC ID corresponds to a default VPC and you have specified
     * either the DefaultAvailabilityZone or the
     * DefaultSubnetId parameter only, AWS OpsWorks infers the value of
     * the other parameter. If you specify neither parameter, AWS OpsWorks sets these
     * parameters to the first valid Availability Zone for the specified region and the
     * corresponding default VPC subnet ID, respectively.

If you specify a
     * nondefault VPC ID, note the following:

It must belong to a VPC
     * in your account that is in the specified region.

You must
     * specify a value for DefaultSubnetId.

For more
     * information on how to use AWS OpsWorks with a VPC, see Running
     * a Stack in a VPC. For more information on default VPC and EC2 Classic, see
     * Supported
     * Platforms.

     */
    inline CloneStackRequest& WithVpcId(const Aws::String& value) { SetVpcId(value); return *this;}

    /**
     *
The ID of the VPC that the cloned stack is to be launched into. It must be in
     * the specified region. All instances are launched into this VPC, and you cannot
     * change the ID later.

If your account supports EC2 Classic, the
     * default value is no VPC.

If your account does not support EC2
     * Classic, the default value is the default VPC for the specified region.

     *

If the VPC ID corresponds to a default VPC and you have specified
     * either the DefaultAvailabilityZone or the
     * DefaultSubnetId parameter only, AWS OpsWorks infers the value of
     * the other parameter. If you specify neither parameter, AWS OpsWorks sets these
     * parameters to the first valid Availability Zone for the specified region and the
     * corresponding default VPC subnet ID, respectively.

If you specify a
     * nondefault VPC ID, note the following:

It must belong to a VPC
     * in your account that is in the specified region.

You must
     * specify a value for DefaultSubnetId.

For more
     * information on how to use AWS OpsWorks with a VPC, see Running
     * a Stack in a VPC. For more information on default VPC and EC2 Classic, see
     * Supported
     * Platforms.

     */
    inline CloneStackRequest& WithVpcId(Aws::String&& value) { SetVpcId(value); return *this;}

    /**
     *
The ID of the VPC that the cloned stack is to be launched into. It must be in
     * the specified region. All instances are launched into this VPC, and you cannot
     * change the ID later.

If your account supports EC2 Classic, the
     * default value is no VPC.

If your account does not support EC2
     * Classic, the default value is the default VPC for the specified region.

     *

If the VPC ID corresponds to a default VPC and you have specified
     * either the DefaultAvailabilityZone or the
     * DefaultSubnetId parameter only, AWS OpsWorks infers the value of
     * the other parameter. If you specify neither parameter, AWS OpsWorks sets these
     * parameters to the first valid Availability Zone for the specified region and the
     * corresponding default VPC subnet ID, respectively.

If you specify a
     * nondefault VPC ID, note the following:

It must belong to a VPC
     * in your account that is in the specified region.

You must
     * specify a value for DefaultSubnetId.

For more
     * information on how to use AWS OpsWorks with a VPC, see Running
     * a Stack in a VPC. For more information on default VPC and EC2 Classic, see
     * Supported
     * Platforms.

     */
    inline CloneStackRequest& WithVpcId(const char* value) { SetVpcId(value); return *this;}

    /**
     *
A list of stack attributes and values as key/value pairs to be added to the
     * cloned stack.

     */
    inline const Aws::Map<StackAttributesKeys, Aws::String>& GetAttributes() const{ return m_attributes; }

    /**
     *
A list of stack attributes and values as key/value pairs to be added to the
     * cloned stack.

     */
    inline void SetAttributes(const Aws::Map<StackAttributesKeys, Aws::String>& value) { m_attributesHasBeenSet = true; m_attributes = value; }

    /**
     *
A list of stack attributes and values as key/value pairs to be added to the
     * cloned stack.

     */
    inline void SetAttributes(Aws::Map<StackAttributesKeys, Aws::String>&& value) { m_attributesHasBeenSet = true; m_attributes = value; }

    /**
     *
A list of stack attributes and values as key/value pairs to be added to the
     * cloned stack.

     */
    inline CloneStackRequest& WithAttributes(const Aws::Map<StackAttributesKeys, Aws::String>& value) { SetAttributes(value); return *this;}

    /**
     *
A list of stack attributes and values as key/value pairs to be added to the
     * cloned stack.

     */
    inline CloneStackRequest& WithAttributes(Aws::Map<StackAttributesKeys, Aws::String>&& value) { SetAttributes(value); return *this;}

    /**
     *
A list of stack attributes and values as key/value pairs to be added to the
     * cloned stack.

     */
    inline CloneStackRequest& AddAttributes(const StackAttributesKeys& key, const Aws::String& value) { m_attributesHasBeenSet = true; m_attributes[key] = value; return *this; }

    /**
     *
A list of stack attributes and values as key/value pairs to be added to the
     * cloned stack.

     */
    inline CloneStackRequest& AddAttributes(StackAttributesKeys&& key, const Aws::String& value) { m_attributesHasBeenSet = true; m_attributes[key] = value; return *this; }

    /**
     *
A list of stack attributes and values as key/value pairs to be added to the
     * cloned stack.

     */
    inline CloneStackRequest& AddAttributes(const StackAttributesKeys& key, Aws::String&& value) { m_attributesHasBeenSet = true; m_attributes[key] = value; return *this; }

    /**
     *
A list of stack attributes and values as key/value pairs to be added to the
     * cloned stack.

     */
    inline CloneStackRequest& AddAttributes(StackAttributesKeys&& key, Aws::String&& value) { m_attributesHasBeenSet = true; m_attributes[key] = value; return *this; }

    /**
     *
A list of stack attributes and values as key/value pairs to be added to the
     * cloned stack.

     */
    inline CloneStackRequest& AddAttributes(StackAttributesKeys&& key, const char* value) { m_attributesHasBeenSet = true; m_attributes[key] = value; return *this; }

    /**
     *
A list of stack attributes and values as key/value pairs to be added to the
     * cloned stack.

     */
    inline CloneStackRequest& AddAttributes(const StackAttributesKeys& key, const char* value) { m_attributesHasBeenSet = true; m_attributes[key] = value; return *this; }

    /**
     *
The stack AWS Identity and Access Management (IAM) role, which allows AWS
     * OpsWorks to work with AWS resources on your behalf. You must set this parameter
     * to the Amazon Resource Name (ARN) for an existing IAM role. If you create a
     * stack by using the AWS OpsWorks console, it creates the role for you. You can
     * obtain an existing stack's IAM ARN programmatically by calling
     * DescribePermissions. For more information about IAM ARNs, see Using
     * Identifiers.
 <note>
You must set this parameter to a valid service
     * role ARN or the action will fail; there is no default value. You can specify the
     * source stack's service role ARN, if you prefer, but you must do so
     * explicitly.
 </note>
     */
    inline const Aws::String& GetServiceRoleArn() const{ return m_serviceRoleArn; }

    /**
     *
The stack AWS Identity and Access Management (IAM) role, which allows AWS
     * OpsWorks to work with AWS resources on your behalf. You must set this parameter
     * to the Amazon Resource Name (ARN) for an existing IAM role. If you create a
     * stack by using the AWS OpsWorks console, it creates the role for you. You can
     * obtain an existing stack's IAM ARN programmatically by calling
     * DescribePermissions. For more information about IAM ARNs, see Using
     * Identifiers.
 <note>
You must set this parameter to a valid service
     * role ARN or the action will fail; there is no default value. You can specify the
     * source stack's service role ARN, if you prefer, but you must do so
     * explicitly.
 </note>
     */
    inline void SetServiceRoleArn(const Aws::String& value) { m_serviceRoleArnHasBeenSet = true; m_serviceRoleArn = value; }

    /**
     *
The stack AWS Identity and Access Management (IAM) role, which allows AWS
     * OpsWorks to work with AWS resources on your behalf. You must set this parameter
     * to the Amazon Resource Name (ARN) for an existing IAM role. If you create a
     * stack by using the AWS OpsWorks console, it creates the role for you. You can
     * obtain an existing stack's IAM ARN programmatically by calling
     * DescribePermissions. For more information about IAM ARNs, see Using
     * Identifiers.
 <note>
You must set this parameter to a valid service
     * role ARN or the action will fail; there is no default value. You can specify the
     * source stack's service role ARN, if you prefer, but you must do so
     * explicitly.
 </note>
     */
    inline void SetServiceRoleArn(Aws::String&& value) { m_serviceRoleArnHasBeenSet = true; m_serviceRoleArn = value; }

    /**
     *
The stack AWS Identity and Access Management (IAM) role, which allows AWS
     * OpsWorks to work with AWS resources on your behalf. You must set this parameter
     * to the Amazon Resource Name (ARN) for an existing IAM role. If you create a
     * stack by using the AWS OpsWorks console, it creates the role for you. You can
     * obtain an existing stack's IAM ARN programmatically by calling
     * DescribePermissions. For more information about IAM ARNs, see Using
     * Identifiers.
 <note>
You must set this parameter to a valid service
     * role ARN or the action will fail; there is no default value. You can specify the
     * source stack's service role ARN, if you prefer, but you must do so
     * explicitly.
 </note>
     */
    inline void SetServiceRoleArn(const char* value) { m_serviceRoleArnHasBeenSet = true; m_serviceRoleArn.assign(value); }

    /**
     *
The stack AWS Identity and Access Management (IAM) role, which allows AWS
     * OpsWorks to work with AWS resources on your behalf. You must set this parameter
     * to the Amazon Resource Name (ARN) for an existing IAM role. If you create a
     * stack by using the AWS OpsWorks console, it creates the role for you. You can
     * obtain an existing stack's IAM ARN programmatically by calling
     * DescribePermissions. For more information about IAM ARNs, see Using
     * Identifiers.
 <note>
You must set this parameter to a valid service
     * role ARN or the action will fail; there is no default value. You can specify the
     * source stack's service role ARN, if you prefer, but you must do so
     * explicitly.
 </note>
     */
    inline CloneStackRequest& WithServiceRoleArn(const Aws::String& value) { SetServiceRoleArn(value); return *this;}

    /**
     *
The stack AWS Identity and Access Management (IAM) role, which allows AWS
     * OpsWorks to work with AWS resources on your behalf. You must set this parameter
     * to the Amazon Resource Name (ARN) for an existing IAM role. If you create a
     * stack by using the AWS OpsWorks console, it creates the role for you. You can
     * obtain an existing stack's IAM ARN programmatically by calling
     * DescribePermissions. For more information about IAM ARNs, see Using
     * Identifiers.
 <note>
You must set this parameter to a valid service
     * role ARN or the action will fail; there is no default value. You can specify the
     * source stack's service role ARN, if you prefer, but you must do so
     * explicitly.
 </note>
     */
    inline CloneStackRequest& WithServiceRoleArn(Aws::String&& value) { SetServiceRoleArn(value); return *this;}

    /**
     *
The stack AWS Identity and Access Management (IAM) role, which allows AWS
     * OpsWorks to work with AWS resources on your behalf. You must set this parameter
     * to the Amazon Resource Name (ARN) for an existing IAM role. If you create a
     * stack by using the AWS OpsWorks console, it creates the role for you. You can
     * obtain an existing stack's IAM ARN programmatically by calling
     * DescribePermissions. For more information about IAM ARNs, see Using
     * Identifiers.
 <note>
You must set this parameter to a valid service
     * role ARN or the action will fail; there is no default value. You can specify the
     * source stack's service role ARN, if you prefer, but you must do so
     * explicitly.
 </note>
     */
    inline CloneStackRequest& WithServiceRoleArn(const char* value) { SetServiceRoleArn(value); return *this;}

    /**
     *
The Amazon Resource Name (ARN) of an IAM profile that is the default profile
     * for all of the stack's EC2 instances. For more information about IAM ARNs, see
     * Using
     * Identifiers.

     */
    inline const Aws::String& GetDefaultInstanceProfileArn() const{ return m_defaultInstanceProfileArn; }

    /**
     *
The Amazon Resource Name (ARN) of an IAM profile that is the default profile
     * for all of the stack's EC2 instances. For more information about IAM ARNs, see
     * Using
     * Identifiers.

     */
    inline void SetDefaultInstanceProfileArn(const Aws::String& value) { m_defaultInstanceProfileArnHasBeenSet = true; m_defaultInstanceProfileArn = value; }

    /**
     *
The Amazon Resource Name (ARN) of an IAM profile that is the default profile
     * for all of the stack's EC2 instances. For more information about IAM ARNs, see
     * Using
     * Identifiers.

     */
    inline void SetDefaultInstanceProfileArn(Aws::String&& value) { m_defaultInstanceProfileArnHasBeenSet = true; m_defaultInstanceProfileArn = value; }

    /**
     *
The Amazon Resource Name (ARN) of an IAM profile that is the default profile
     * for all of the stack's EC2 instances. For more information about IAM ARNs, see
     * Using
     * Identifiers.

     */
    inline void SetDefaultInstanceProfileArn(const char* value) { m_defaultInstanceProfileArnHasBeenSet = true; m_defaultInstanceProfileArn.assign(value); }

    /**
     *
The Amazon Resource Name (ARN) of an IAM profile that is the default profile
     * for all of the stack's EC2 instances. For more information about IAM ARNs, see
     * Using
     * Identifiers.

     */
    inline CloneStackRequest& WithDefaultInstanceProfileArn(const Aws::String& value) { SetDefaultInstanceProfileArn(value); return *this;}

    /**
     *
The Amazon Resource Name (ARN) of an IAM profile that is the default profile
     * for all of the stack's EC2 instances. For more information about IAM ARNs, see
     * Using
     * Identifiers.

     */
    inline CloneStackRequest& WithDefaultInstanceProfileArn(Aws::String&& value) { SetDefaultInstanceProfileArn(value); return *this;}

    /**
     *
The Amazon Resource Name (ARN) of an IAM profile that is the default profile
     * for all of the stack's EC2 instances. For more information about IAM ARNs, see
     * Using
     * Identifiers.

     */
    inline CloneStackRequest& WithDefaultInstanceProfileArn(const char* value) { SetDefaultInstanceProfileArn(value); return *this;}

    /**
     *
The stack's operating system, which must be set to one of the following.

     *

A supported Linux operating system: An Amazon Linux version, such
     * as Amazon Linux 2016.03, Amazon Linux 2015.09, or
     * Amazon Linux 2015.03.

A supported Ubuntu
     * operating system, such as Ubuntu 16.04 LTS, Ubuntu 14.04
     * LTS, or Ubuntu 12.04 LTS.

 CentOS
     * 7

 Red Hat Enterprise Linux 7

     *

 Microsoft Windows Server 2012 R2 Base, Microsoft
     * Windows Server 2012 R2 with SQL Server Express, Microsoft Windows
     * Server 2012 R2 with SQL Server Standard, or Microsoft Windows
     * Server 2012 R2 with SQL Server Web.

A custom AMI:
     * Custom. You specify the custom AMI you want to use when you create
     * instances. For more information on how to use custom AMIs with OpsWorks, see Using
     * Custom AMIs.

The default option is the parent stack's
     * operating system. For more information on the supported operating systems, see
     * AWS
     * OpsWorks Operating Systems.
 <note>
You can specify a different Linux
     * operating system for the cloned stack, but you cannot change from Linux to
     * Windows or Windows to Linux.
 </note>
     */
    inline const Aws::String& GetDefaultOs() const{ return m_defaultOs; }

    /**
     *
The stack's operating system, which must be set to one of the following.

     *

A supported Linux operating system: An Amazon Linux version, such
     * as Amazon Linux 2016.03, Amazon Linux 2015.09, or
     * Amazon Linux 2015.03.

A supported Ubuntu
     * operating system, such as Ubuntu 16.04 LTS, Ubuntu 14.04
     * LTS, or Ubuntu 12.04 LTS.

 CentOS
     * 7

 Red Hat Enterprise Linux 7

     *

 Microsoft Windows Server 2012 R2 Base, Microsoft
     * Windows Server 2012 R2 with SQL Server Express, Microsoft Windows
     * Server 2012 R2 with SQL Server Standard, or Microsoft Windows
     * Server 2012 R2 with SQL Server Web.

A custom AMI:
     * Custom. You specify the custom AMI you want to use when you create
     * instances. For more information on how to use custom AMIs with OpsWorks, see Using
     * Custom AMIs.

The default option is the parent stack's
     * operating system. For more information on the supported operating systems, see
     * AWS
     * OpsWorks Operating Systems.
 <note>
You can specify a different Linux
     * operating system for the cloned stack, but you cannot change from Linux to
     * Windows or Windows to Linux.
 </note>
     */
    inline void SetDefaultOs(const Aws::String& value) { m_defaultOsHasBeenSet = true; m_defaultOs = value; }

    /**
     *
The stack's operating system, which must be set to one of the following.

     *

A supported Linux operating system: An Amazon Linux version, such
     * as Amazon Linux 2016.03, Amazon Linux 2015.09, or
     * Amazon Linux 2015.03.

A supported Ubuntu
     * operating system, such as Ubuntu 16.04 LTS, Ubuntu 14.04
     * LTS, or Ubuntu 12.04 LTS.

 CentOS
     * 7

 Red Hat Enterprise Linux 7

     *

 Microsoft Windows Server 2012 R2 Base, Microsoft
     * Windows Server 2012 R2 with SQL Server Express, Microsoft Windows
     * Server 2012 R2 with SQL Server Standard, or Microsoft Windows
     * Server 2012 R2 with SQL Server Web.

A custom AMI:
     * Custom. You specify the custom AMI you want to use when you create
     * instances. For more information on how to use custom AMIs with OpsWorks, see Using
     * Custom AMIs.

The default option is the parent stack's
     * operating system. For more information on the supported operating systems, see
     * AWS
     * OpsWorks Operating Systems.
 <note>
You can specify a different Linux
     * operating system for the cloned stack, but you cannot change from Linux to
     * Windows or Windows to Linux.
 </note>
     */
    inline void SetDefaultOs(Aws::String&& value) { m_defaultOsHasBeenSet = true; m_defaultOs = value; }

    /**
     *
The stack's operating system, which must be set to one of the following.

     *

A supported Linux operating system: An Amazon Linux version, such
     * as Amazon Linux 2016.03, Amazon Linux 2015.09, or
     * Amazon Linux 2015.03.

A supported Ubuntu
     * operating system, such as Ubuntu 16.04 LTS, Ubuntu 14.04
     * LTS, or Ubuntu 12.04 LTS.

 CentOS
     * 7

 Red Hat Enterprise Linux 7

     *

 Microsoft Windows Server 2012 R2 Base, Microsoft
     * Windows Server 2012 R2 with SQL Server Express, Microsoft Windows
     * Server 2012 R2 with SQL Server Standard, or Microsoft Windows
     * Server 2012 R2 with SQL Server Web.

A custom AMI:
     * Custom. You specify the custom AMI you want to use when you create
     * instances. For more information on how to use custom AMIs with OpsWorks, see Using
     * Custom AMIs.

The default option is the parent stack's
     * operating system. For more information on the supported operating systems, see
     * AWS
     * OpsWorks Operating Systems.
 <note>
You can specify a different Linux
     * operating system for the cloned stack, but you cannot change from Linux to
     * Windows or Windows to Linux.
 </note>
     */
    inline void SetDefaultOs(const char* value) { m_defaultOsHasBeenSet = true; m_defaultOs.assign(value); }

    /**
     *
The stack's operating system, which must be set to one of the following.

     *

A supported Linux operating system: An Amazon Linux version, such
     * as Amazon Linux 2016.03, Amazon Linux 2015.09, or
     * Amazon Linux 2015.03.

A supported Ubuntu
     * operating system, such as Ubuntu 16.04 LTS, Ubuntu 14.04
     * LTS, or Ubuntu 12.04 LTS.

 CentOS
     * 7

 Red Hat Enterprise Linux 7

     *

 Microsoft Windows Server 2012 R2 Base, Microsoft
     * Windows Server 2012 R2 with SQL Server Express, Microsoft Windows
     * Server 2012 R2 with SQL Server Standard, or Microsoft Windows
     * Server 2012 R2 with SQL Server Web.

A custom AMI:
     * Custom. You specify the custom AMI you want to use when you create
     * instances. For more information on how to use custom AMIs with OpsWorks, see Using
     * Custom AMIs.

The default option is the parent stack's
     * operating system. For more information on the supported operating systems, see
     * AWS
     * OpsWorks Operating Systems.
 <note>
You can specify a different Linux
     * operating system for the cloned stack, but you cannot change from Linux to
     * Windows or Windows to Linux.
 </note>
     */
    inline CloneStackRequest& WithDefaultOs(const Aws::String& value) { SetDefaultOs(value); return *this;}

    /**
     *
The stack's operating system, which must be set to one of the following.

     *

A supported Linux operating system: An Amazon Linux version, such
     * as Amazon Linux 2016.03, Amazon Linux 2015.09, or
     * Amazon Linux 2015.03.

A supported Ubuntu
     * operating system, such as Ubuntu 16.04 LTS, Ubuntu 14.04
     * LTS, or Ubuntu 12.04 LTS.

 CentOS
     * 7

 Red Hat Enterprise Linux 7

     *

 Microsoft Windows Server 2012 R2 Base, Microsoft
     * Windows Server 2012 R2 with SQL Server Express, Microsoft Windows
     * Server 2012 R2 with SQL Server Standard, or Microsoft Windows
     * Server 2012 R2 with SQL Server Web.

A custom AMI:
     * Custom. You specify the custom AMI you want to use when you create
     * instances. For more information on how to use custom AMIs with OpsWorks, see Using
     * Custom AMIs.

The default option is the parent stack's
     * operating system. For more information on the supported operating systems, see
     * AWS
     * OpsWorks Operating Systems.
 <note>
You can specify a different Linux
     * operating system for the cloned stack, but you cannot change from Linux to
     * Windows or Windows to Linux.
 </note>
     */
    inline CloneStackRequest& WithDefaultOs(Aws::String&& value) { SetDefaultOs(value); return *this;}

    /**
     *
The stack's operating system, which must be set to one of the following.

     *

A supported Linux operating system: An Amazon Linux version, such
     * as Amazon Linux 2016.03, Amazon Linux 2015.09, or
     * Amazon Linux 2015.03.

A supported Ubuntu
     * operating system, such as Ubuntu 16.04 LTS, Ubuntu 14.04
     * LTS, or Ubuntu 12.04 LTS.

 CentOS
     * 7

 Red Hat Enterprise Linux 7

     *

 Microsoft Windows Server 2012 R2 Base, Microsoft
     * Windows Server 2012 R2 with SQL Server Express, Microsoft Windows
     * Server 2012 R2 with SQL Server Standard, or Microsoft Windows
     * Server 2012 R2 with SQL Server Web.

A custom AMI:
     * Custom. You specify the custom AMI you want to use when you create
     * instances. For more information on how to use custom AMIs with OpsWorks, see Using
     * Custom AMIs.

The default option is the parent stack's
     * operating system. For more information on the supported operating systems, see
     * AWS
     * OpsWorks Operating Systems.
 <note>
You can specify a different Linux
     * operating system for the cloned stack, but you cannot change from Linux to
     * Windows or Windows to Linux.
 </note>
     */
    inline CloneStackRequest& WithDefaultOs(const char* value) { SetDefaultOs(value); return *this;}

    /**
     *
The stack's host name theme, with spaces are replaced by underscores. The
     * theme is used to generate host names for the stack's instances. By default,
     * HostnameTheme is set to Layer_Dependent, which creates
     * host names by appending integers to the layer's short name. The other themes
     * are:

 Baked_Goods

     * Clouds

 Europe_Cities

     *

 Fruits

 Greek_Deities

     *

 Legendary_creatures_from_Japan

     * Planets_and_Moons

 Roman_Deities
     *

 Scottish_Islands

     * US_Cities

 Wild_Cats

     *

To obtain a generated host name, call
     * GetHostNameSuggestion, which returns a host name based on the
     * current theme.

     */
    inline const Aws::String& GetHostnameTheme() const{ return m_hostnameTheme; }

    /**
     *
The stack's host name theme, with spaces are replaced by underscores. The
     * theme is used to generate host names for the stack's instances. By default,
     * HostnameTheme is set to Layer_Dependent, which creates
     * host names by appending integers to the layer's short name. The other themes
     * are:

 Baked_Goods

     * Clouds

 Europe_Cities

     *

 Fruits

 Greek_Deities

     *

 Legendary_creatures_from_Japan

     * Planets_and_Moons

 Roman_Deities
     *

 Scottish_Islands

     * US_Cities

 Wild_Cats

     *

To obtain a generated host name, call
     * GetHostNameSuggestion, which returns a host name based on the
     * current theme.

     */
    inline void SetHostnameTheme(const Aws::String& value) { m_hostnameThemeHasBeenSet = true; m_hostnameTheme = value; }

    /**
     *
The stack's host name theme, with spaces are replaced by underscores. The
     * theme is used to generate host names for the stack's instances. By default,
     * HostnameTheme is set to Layer_Dependent, which creates
     * host names by appending integers to the layer's short name. The other themes
     * are:

 Baked_Goods

     * Clouds

 Europe_Cities

     *

 Fruits

 Greek_Deities

     *

 Legendary_creatures_from_Japan

     * Planets_and_Moons

 Roman_Deities
     *

 Scottish_Islands

     * US_Cities

 Wild_Cats

     *

To obtain a generated host name, call
     * GetHostNameSuggestion, which returns a host name based on the
     * current theme.

     */
    inline void SetHostnameTheme(Aws::String&& value) { m_hostnameThemeHasBeenSet = true; m_hostnameTheme = value; }

    /**
     *
The stack's host name theme, with spaces are replaced by underscores. The
     * theme is used to generate host names for the stack's instances. By default,
     * HostnameTheme is set to Layer_Dependent, which creates
     * host names by appending integers to the layer's short name. The other themes
     * are:

 Baked_Goods

     * Clouds

 Europe_Cities

     *

 Fruits

 Greek_Deities

     *

 Legendary_creatures_from_Japan

     * Planets_and_Moons

 Roman_Deities
     *

 Scottish_Islands

     * US_Cities

 Wild_Cats

     *

To obtain a generated host name, call
     * GetHostNameSuggestion, which returns a host name based on the
     * current theme.

     */
    inline void SetHostnameTheme(const char* value) { m_hostnameThemeHasBeenSet = true; m_hostnameTheme.assign(value); }

    /**
     *
The stack's host name theme, with spaces are replaced by underscores. The
     * theme is used to generate host names for the stack's instances. By default,
     * HostnameTheme is set to Layer_Dependent, which creates
     * host names by appending integers to the layer's short name. The other themes
     * are:

 Baked_Goods

     * Clouds

 Europe_Cities

     *

 Fruits

 Greek_Deities

     *

 Legendary_creatures_from_Japan

     * Planets_and_Moons

 Roman_Deities
     *

 Scottish_Islands

     * US_Cities

 Wild_Cats

     *

To obtain a generated host name, call
     * GetHostNameSuggestion, which returns a host name based on the
     * current theme.

     */
    inline CloneStackRequest& WithHostnameTheme(const Aws::String& value) { SetHostnameTheme(value); return *this;}

    /**
     *
The stack's host name theme, with spaces are replaced by underscores. The
     * theme is used to generate host names for the stack's instances. By default,
     * HostnameTheme is set to Layer_Dependent, which creates
     * host names by appending integers to the layer's short name. The other themes
     * are:

 Baked_Goods

     * Clouds

 Europe_Cities

     *

 Fruits

 Greek_Deities

     *

 Legendary_creatures_from_Japan

     * Planets_and_Moons

 Roman_Deities
     *

 Scottish_Islands

     * US_Cities

 Wild_Cats

     *

To obtain a generated host name, call
     * GetHostNameSuggestion, which returns a host name based on the
     * current theme.

     */
    inline CloneStackRequest& WithHostnameTheme(Aws::String&& value) { SetHostnameTheme(value); return *this;}

    /**
     *
The stack's host name theme, with spaces are replaced by underscores. The
     * theme is used to generate host names for the stack's instances. By default,
     * HostnameTheme is set to Layer_Dependent, which creates
     * host names by appending integers to the layer's short name. The other themes
     * are:

 Baked_Goods

     * Clouds

 Europe_Cities

     *

 Fruits

 Greek_Deities

     *

 Legendary_creatures_from_Japan

     * Planets_and_Moons

 Roman_Deities
     *

 Scottish_Islands

     * US_Cities

 Wild_Cats

     *

To obtain a generated host name, call
     * GetHostNameSuggestion, which returns a host name based on the
     * current theme.

     */
    inline CloneStackRequest& WithHostnameTheme(const char* value) { SetHostnameTheme(value); return *this;}

    /**
     *
The cloned stack's default Availability Zone, which must be in the specified
     * region. For more information, see Regions and
     * Endpoints. If you also specify a value for DefaultSubnetId, the
     * subnet must be in the same zone. For more information, see the
     * VpcId parameter description.

     */
    inline const Aws::String& GetDefaultAvailabilityZone() const{ return m_defaultAvailabilityZone; }

    /**
     *
The cloned stack's default Availability Zone, which must be in the specified
     * region. For more information, see Regions and
     * Endpoints. If you also specify a value for DefaultSubnetId, the
     * subnet must be in the same zone. For more information, see the
     * VpcId parameter description.

     */
    inline void SetDefaultAvailabilityZone(const Aws::String& value) { m_defaultAvailabilityZoneHasBeenSet = true; m_defaultAvailabilityZone = value; }

    /**
     *
The cloned stack's default Availability Zone, which must be in the specified
     * region. For more information, see Regions and
     * Endpoints. If you also specify a value for DefaultSubnetId, the
     * subnet must be in the same zone. For more information, see the
     * VpcId parameter description.

     */
    inline void SetDefaultAvailabilityZone(Aws::String&& value) { m_defaultAvailabilityZoneHasBeenSet = true; m_defaultAvailabilityZone = value; }

    /**
     *
The cloned stack's default Availability Zone, which must be in the specified
     * region. For more information, see Regions and
     * Endpoints. If you also specify a value for DefaultSubnetId, the
     * subnet must be in the same zone. For more information, see the
     * VpcId parameter description.

     */
    inline void SetDefaultAvailabilityZone(const char* value) { m_defaultAvailabilityZoneHasBeenSet = true; m_defaultAvailabilityZone.assign(value); }

    /**
     *
The cloned stack's default Availability Zone, which must be in the specified
     * region. For more information, see Regions and
     * Endpoints. If you also specify a value for DefaultSubnetId, the
     * subnet must be in the same zone. For more information, see the
     * VpcId parameter description.

     */
    inline CloneStackRequest& WithDefaultAvailabilityZone(const Aws::String& value) { SetDefaultAvailabilityZone(value); return *this;}

    /**
     *
The cloned stack's default Availability Zone, which must be in the specified
     * region. For more information, see Regions and
     * Endpoints. If you also specify a value for DefaultSubnetId, the
     * subnet must be in the same zone. For more information, see the
     * VpcId parameter description.

     */
    inline CloneStackRequest& WithDefaultAvailabilityZone(Aws::String&& value) { SetDefaultAvailabilityZone(value); return *this;}

    /**
     *
The cloned stack's default Availability Zone, which must be in the specified
     * region. For more information, see Regions and
     * Endpoints. If you also specify a value for DefaultSubnetId, the
     * subnet must be in the same zone. For more information, see the
     * VpcId parameter description.

     */
    inline CloneStackRequest& WithDefaultAvailabilityZone(const char* value) { SetDefaultAvailabilityZone(value); return *this;}

    /**
     *
The stack's default VPC subnet ID. This parameter is required if you specify
     * a value for the VpcId parameter. All instances are launched into
     * this subnet unless you specify otherwise when you create the instance. If you
     * also specify a value for DefaultAvailabilityZone, the subnet must
     * be in that zone. For information on default values and when this parameter is
     * required, see the VpcId parameter description.

     */
    inline const Aws::String& GetDefaultSubnetId() const{ return m_defaultSubnetId; }

    /**
     *
The stack's default VPC subnet ID. This parameter is required if you specify
     * a value for the VpcId parameter. All instances are launched into
     * this subnet unless you specify otherwise when you create the instance. If you
     * also specify a value for DefaultAvailabilityZone, the subnet must
     * be in that zone. For information on default values and when this parameter is
     * required, see the VpcId parameter description.

     */
    inline void SetDefaultSubnetId(const Aws::String& value) { m_defaultSubnetIdHasBeenSet = true; m_defaultSubnetId = value; }

    /**
     *
The stack's default VPC subnet ID. This parameter is required if you specify
     * a value for the VpcId parameter. All instances are launched into
     * this subnet unless you specify otherwise when you create the instance. If you
     * also specify a value for DefaultAvailabilityZone, the subnet must
     * be in that zone. For information on default values and when this parameter is
     * required, see the VpcId parameter description.

     */
    inline void SetDefaultSubnetId(Aws::String&& value) { m_defaultSubnetIdHasBeenSet = true; m_defaultSubnetId = value; }

    /**
     *
The stack's default VPC subnet ID. This parameter is required if you specify
     * a value for the VpcId parameter. All instances are launched into
     * this subnet unless you specify otherwise when you create the instance. If you
     * also specify a value for DefaultAvailabilityZone, the subnet must
     * be in that zone. For information on default values and when this parameter is
     * required, see the VpcId parameter description.

     */
    inline void SetDefaultSubnetId(const char* value) { m_defaultSubnetIdHasBeenSet = true; m_defaultSubnetId.assign(value); }

    /**
     *
The stack's default VPC subnet ID. This parameter is required if you specify
     * a value for the VpcId parameter. All instances are launched into
     * this subnet unless you specify otherwise when you create the instance. If you
     * also specify a value for DefaultAvailabilityZone, the subnet must
     * be in that zone. For information on default values and when this parameter is
     * required, see the VpcId parameter description.

     */
    inline CloneStackRequest& WithDefaultSubnetId(const Aws::String& value) { SetDefaultSubnetId(value); return *this;}

    /**
     *
The stack's default VPC subnet ID. This parameter is required if you specify
     * a value for the VpcId parameter. All instances are launched into
     * this subnet unless you specify otherwise when you create the instance. If you
     * also specify a value for DefaultAvailabilityZone, the subnet must
     * be in that zone. For information on default values and when this parameter is
     * required, see the VpcId parameter description.

     */
    inline CloneStackRequest& WithDefaultSubnetId(Aws::String&& value) { SetDefaultSubnetId(value); return *this;}

    /**
     *
The stack's default VPC subnet ID. This parameter is required if you specify
     * a value for the VpcId parameter. All instances are launched into
     * this subnet unless you specify otherwise when you create the instance. If you
     * also specify a value for DefaultAvailabilityZone, the subnet must
     * be in that zone. For information on default values and when this parameter is
     * required, see the VpcId parameter description.

     */
    inline CloneStackRequest& WithDefaultSubnetId(const char* value) { SetDefaultSubnetId(value); return *this;}

    /**
     *
A string that contains user-defined, custom JSON. It is used to override the
     * corresponding default stack configuration JSON values. The string should be in
     * the following format:

 "{\"key1\": \"value1\", \"key2\":
     * \"value2\",...}"

For more information on custom JSON, see Use
     * Custom JSON to Modify the Stack Configuration Attributes

     */
    inline const Aws::String& GetCustomJson() const{ return m_customJson; }

    /**
     *
A string that contains user-defined, custom JSON. It is used to override the
     * corresponding default stack configuration JSON values. The string should be in
     * the following format:

 "{\"key1\": \"value1\", \"key2\":
     * \"value2\",...}"

For more information on custom JSON, see Use
     * Custom JSON to Modify the Stack Configuration Attributes

     */
    inline void SetCustomJson(const Aws::String& value) { m_customJsonHasBeenSet = true; m_customJson = value; }

    /**
     *
A string that contains user-defined, custom JSON. It is used to override the
     * corresponding default stack configuration JSON values. The string should be in
     * the following format:

 "{\"key1\": \"value1\", \"key2\":
     * \"value2\",...}"

For more information on custom JSON, see Use
     * Custom JSON to Modify the Stack Configuration Attributes

     */
    inline void SetCustomJson(Aws::String&& value) { m_customJsonHasBeenSet = true; m_customJson = value; }

    /**
     *
A string that contains user-defined, custom JSON. It is used to override the
     * corresponding default stack configuration JSON values. The string should be in
     * the following format:

 "{\"key1\": \"value1\", \"key2\":
     * \"value2\",...}"

For more information on custom JSON, see Use
     * Custom JSON to Modify the Stack Configuration Attributes

     */
    inline void SetCustomJson(const char* value) { m_customJsonHasBeenSet = true; m_customJson.assign(value); }

    /**
     *
A string that contains user-defined, custom JSON. It is used to override the
     * corresponding default stack configuration JSON values. The string should be in
     * the following format:

 "{\"key1\": \"value1\", \"key2\":
     * \"value2\",...}"

For more information on custom JSON, see Use
     * Custom JSON to Modify the Stack Configuration Attributes

     */
    inline CloneStackRequest& WithCustomJson(const Aws::String& value) { SetCustomJson(value); return *this;}

    /**
     *
A string that contains user-defined, custom JSON. It is used to override the
     * corresponding default stack configuration JSON values. The string should be in
     * the following format:

 "{\"key1\": \"value1\", \"key2\":
     * \"value2\",...}"

For more information on custom JSON, see Use
     * Custom JSON to Modify the Stack Configuration Attributes

     */
    inline CloneStackRequest& WithCustomJson(Aws::String&& value) { SetCustomJson(value); return *this;}

    /**
     *
A string that contains user-defined, custom JSON. It is used to override the
     * corresponding default stack configuration JSON values. The string should be in
     * the following format:

 "{\"key1\": \"value1\", \"key2\":
     * \"value2\",...}"

For more information on custom JSON, see Use
     * Custom JSON to Modify the Stack Configuration Attributes

     */
    inline CloneStackRequest& WithCustomJson(const char* value) { SetCustomJson(value); return *this;}

    /**
     *
The configuration manager. When you clone a stack we recommend that you use
     * the configuration manager to specify the Chef version: 12, 11.10, or 11.4 for
     * Linux stacks, or 12.2 for Windows stacks. The default value for Linux stacks is
     * currently 12.

     */
    inline const StackConfigurationManager& GetConfigurationManager() const{ return m_configurationManager; }

    /**
     *
The configuration manager. When you clone a stack we recommend that you use
     * the configuration manager to specify the Chef version: 12, 11.10, or 11.4 for
     * Linux stacks, or 12.2 for Windows stacks. The default value for Linux stacks is
     * currently 12.

     */
    inline void SetConfigurationManager(const StackConfigurationManager& value) { m_configurationManagerHasBeenSet = true; m_configurationManager = value; }

    /**
     *
The configuration manager. When you clone a stack we recommend that you use
     * the configuration manager to specify the Chef version: 12, 11.10, or 11.4 for
     * Linux stacks, or 12.2 for Windows stacks. The default value for Linux stacks is
     * currently 12.

     */
    inline void SetConfigurationManager(StackConfigurationManager&& value) { m_configurationManagerHasBeenSet = true; m_configurationManager = value; }

    /**
     *
The configuration manager. When you clone a stack we recommend that you use
     * the configuration manager to specify the Chef version: 12, 11.10, or 11.4 for
     * Linux stacks, or 12.2 for Windows stacks. The default value for Linux stacks is
     * currently 12.

     */
    inline CloneStackRequest& WithConfigurationManager(const StackConfigurationManager& value) { SetConfigurationManager(value); return *this;}

    /**
     *
The configuration manager. When you clone a stack we recommend that you use
     * the configuration manager to specify the Chef version: 12, 11.10, or 11.4 for
     * Linux stacks, or 12.2 for Windows stacks. The default value for Linux stacks is
     * currently 12.

     */
    inline CloneStackRequest& WithConfigurationManager(StackConfigurationManager&& value) { SetConfigurationManager(value); return *this;}

    /**
     *
A ChefConfiguration object that specifies whether to enable
     * Berkshelf and the Berkshelf version on Chef 11.10 stacks. For more information,
     * see Create
     * a New Stack.

     */
    inline const ChefConfiguration& GetChefConfiguration() const{ return m_chefConfiguration; }

    /**
     *
A ChefConfiguration object that specifies whether to enable
     * Berkshelf and the Berkshelf version on Chef 11.10 stacks. For more information,
     * see Create
     * a New Stack.

     */
    inline void SetChefConfiguration(const ChefConfiguration& value) { m_chefConfigurationHasBeenSet = true; m_chefConfiguration = value; }

    /**
     *
A ChefConfiguration object that specifies whether to enable
     * Berkshelf and the Berkshelf version on Chef 11.10 stacks. For more information,
     * see Create
     * a New Stack.

     */
    inline void SetChefConfiguration(ChefConfiguration&& value) { m_chefConfigurationHasBeenSet = true; m_chefConfiguration = value; }

    /**
     *
A ChefConfiguration object that specifies whether to enable
     * Berkshelf and the Berkshelf version on Chef 11.10 stacks. For more information,
     * see Create
     * a New Stack.

     */
    inline CloneStackRequest& WithChefConfiguration(const ChefConfiguration& value) { SetChefConfiguration(value); return *this;}

    /**
     *
A ChefConfiguration object that specifies whether to enable
     * Berkshelf and the Berkshelf version on Chef 11.10 stacks. For more information,
     * see Create
     * a New Stack.

     */
    inline CloneStackRequest& WithChefConfiguration(ChefConfiguration&& value) { SetChefConfiguration(value); return *this;}

    /**
     *
Whether to use custom cookbooks.

     */
    inline bool GetUseCustomCookbooks() const{ return m_useCustomCookbooks; }

    /**
     *
Whether to use custom cookbooks.

     */
    inline void SetUseCustomCookbooks(bool value) { m_useCustomCookbooksHasBeenSet = true; m_useCustomCookbooks = value; }

    /**
     *
Whether to use custom cookbooks.

     */
    inline CloneStackRequest& WithUseCustomCookbooks(bool value) { SetUseCustomCookbooks(value); return *this;}

    /**
     *
Whether to associate the AWS OpsWorks built-in security groups with the
     * stack's layers.

AWS OpsWorks provides a standard set of built-in security
     * groups, one for each layer, which are associated with layers by default. With
     * UseOpsworksSecurityGroups you can instead provide your own custom
     * security groups. UseOpsworksSecurityGroups has the following
     * settings:

True - AWS OpsWorks automatically associates the
     * appropriate built-in security group with each layer (default setting). You can
     * associate additional security groups with a layer after you create it but you
     * cannot delete the built-in security group.

False - AWS
     * OpsWorks does not associate built-in security groups with layers. You must
     * create appropriate Amazon Elastic Compute Cloud (Amazon EC2) security groups and
     * associate a security group with each layer that you create. However, you can
     * still manually associate a built-in security group with a layer on creation;
     * custom security groups are required only for those layers that need custom
     * settings.

For more information, see Create
     * a New Stack.

     */
    inline bool GetUseOpsworksSecurityGroups() const{ return m_useOpsworksSecurityGroups; }

    /**
     *
Whether to associate the AWS OpsWorks built-in security groups with the
     * stack's layers.

AWS OpsWorks provides a standard set of built-in security
     * groups, one for each layer, which are associated with layers by default. With
     * UseOpsworksSecurityGroups you can instead provide your own custom
     * security groups. UseOpsworksSecurityGroups has the following
     * settings:

True - AWS OpsWorks automatically associates the
     * appropriate built-in security group with each layer (default setting). You can
     * associate additional security groups with a layer after you create it but you
     * cannot delete the built-in security group.

False - AWS
     * OpsWorks does not associate built-in security groups with layers. You must
     * create appropriate Amazon Elastic Compute Cloud (Amazon EC2) security groups and
     * associate a security group with each layer that you create. However, you can
     * still manually associate a built-in security group with a layer on creation;
     * custom security groups are required only for those layers that need custom
     * settings.

For more information, see Create
     * a New Stack.

     */
    inline void SetUseOpsworksSecurityGroups(bool value) { m_useOpsworksSecurityGroupsHasBeenSet = true; m_useOpsworksSecurityGroups = value; }

    /**
     *
Whether to associate the AWS OpsWorks built-in security groups with the
     * stack's layers.

AWS OpsWorks provides a standard set of built-in security
     * groups, one for each layer, which are associated with layers by default. With
     * UseOpsworksSecurityGroups you can instead provide your own custom
     * security groups. UseOpsworksSecurityGroups has the following
     * settings:

True - AWS OpsWorks automatically associates the
     * appropriate built-in security group with each layer (default setting). You can
     * associate additional security groups with a layer after you create it but you
     * cannot delete the built-in security group.

False - AWS
     * OpsWorks does not associate built-in security groups with layers. You must
     * create appropriate Amazon Elastic Compute Cloud (Amazon EC2) security groups and
     * associate a security group with each layer that you create. However, you can
     * still manually associate a built-in security group with a layer on creation;
     * custom security groups are required only for those layers that need custom
     * settings.

For more information, see Create
     * a New Stack.

     */
    inline CloneStackRequest& WithUseOpsworksSecurityGroups(bool value) { SetUseOpsworksSecurityGroups(value); return *this;}

    inline const Source& GetCustomCookbooksSource() const{ return m_customCookbooksSource; }

    inline void SetCustomCookbooksSource(const Source& value) { m_customCookbooksSourceHasBeenSet = true; m_customCookbooksSource = value; }

    inline void SetCustomCookbooksSource(Source&& value) { m_customCookbooksSourceHasBeenSet = true; m_customCookbooksSource = value; }

    inline CloneStackRequest& WithCustomCookbooksSource(const Source& value) { SetCustomCookbooksSource(value); return *this;}

    inline CloneStackRequest& WithCustomCookbooksSource(Source&& value) { SetCustomCookbooksSource(value); return *this;}

    /**
     *
A default Amazon EC2 key pair name. The default value is none. If you specify
     * a key pair name, AWS OpsWorks installs the public key on the instance and you
     * can use the private key with an SSH client to log in to the instance. For more
     * information, see
     * Using SSH to Communicate with an Instance and
     * Managing SSH Access. You can override this setting by specifying a different
     * key pair, or no key pair, when you
     * create an instance.

     */
    inline const Aws::String& GetDefaultSshKeyName() const{ return m_defaultSshKeyName; }

    /**
     *
A default Amazon EC2 key pair name. The default value is none. If you specify
     * a key pair name, AWS OpsWorks installs the public key on the instance and you
     * can use the private key with an SSH client to log in to the instance. For more
     * information, see
     * Using SSH to Communicate with an Instance and
     * Managing SSH Access. You can override this setting by specifying a different
     * key pair, or no key pair, when you
     * create an instance.

     */
    inline void SetDefaultSshKeyName(const Aws::String& value) { m_defaultSshKeyNameHasBeenSet = true; m_defaultSshKeyName = value; }

    /**
     *
A default Amazon EC2 key pair name. The default value is none. If you specify
     * a key pair name, AWS OpsWorks installs the public key on the instance and you
     * can use the private key with an SSH client to log in to the instance. For more
     * information, see
     * Using SSH to Communicate with an Instance and
     * Managing SSH Access. You can override this setting by specifying a different
     * key pair, or no key pair, when you
     * create an instance.

     */
    inline void SetDefaultSshKeyName(Aws::String&& value) { m_defaultSshKeyNameHasBeenSet = true; m_defaultSshKeyName = value; }

    /**
     *
A default Amazon EC2 key pair name. The default value is none. If you specify
     * a key pair name, AWS OpsWorks installs the public key on the instance and you
     * can use the private key with an SSH client to log in to the instance. For more
     * information, see
     * Using SSH to Communicate with an Instance and
     * Managing SSH Access. You can override this setting by specifying a different
     * key pair, or no key pair, when you
     * create an instance.

     */
    inline void SetDefaultSshKeyName(const char* value) { m_defaultSshKeyNameHasBeenSet = true; m_defaultSshKeyName.assign(value); }

    /**
     *
A default Amazon EC2 key pair name. The default value is none. If you specify
     * a key pair name, AWS OpsWorks installs the public key on the instance and you
     * can use the private key with an SSH client to log in to the instance. For more
     * information, see
     * Using SSH to Communicate with an Instance and
     * Managing SSH Access. You can override this setting by specifying a different
     * key pair, or no key pair, when you
     * create an instance.

     */
    inline CloneStackRequest& WithDefaultSshKeyName(const Aws::String& value) { SetDefaultSshKeyName(value); return *this;}

    /**
     *
A default Amazon EC2 key pair name. The default value is none. If you specify
     * a key pair name, AWS OpsWorks installs the public key on the instance and you
     * can use the private key with an SSH client to log in to the instance. For more
     * information, see
     * Using SSH to Communicate with an Instance and
     * Managing SSH Access. You can override this setting by specifying a different
     * key pair, or no key pair, when you
     * create an instance.

     */
    inline CloneStackRequest& WithDefaultSshKeyName(Aws::String&& value) { SetDefaultSshKeyName(value); return *this;}

    /**
     *
A default Amazon EC2 key pair name. The default value is none. If you specify
     * a key pair name, AWS OpsWorks installs the public key on the instance and you
     * can use the private key with an SSH client to log in to the instance. For more
     * information, see
     * Using SSH to Communicate with an Instance and
     * Managing SSH Access. You can override this setting by specifying a different
     * key pair, or no key pair, when you
     * create an instance.

     */
    inline CloneStackRequest& WithDefaultSshKeyName(const char* value) { SetDefaultSshKeyName(value); return *this;}

    /**
     *
Whether to clone the source stack's permissions.

     */
    inline bool GetClonePermissions() const{ return m_clonePermissions; }

    /**
     *
Whether to clone the source stack's permissions.

     */
    inline void SetClonePermissions(bool value) { m_clonePermissionsHasBeenSet = true; m_clonePermissions = value; }

    /**
     *
Whether to clone the source stack's permissions.

     */
    inline CloneStackRequest& WithClonePermissions(bool value) { SetClonePermissions(value); return *this;}

    /**
     *
A list of source stack app IDs to be included in the cloned stack.

     */
    inline const Aws::Vector<Aws::String>& GetCloneAppIds() const{ return m_cloneAppIds; }

    /**
     *
A list of source stack app IDs to be included in the cloned stack.

     */
    inline void SetCloneAppIds(const Aws::Vector<Aws::String>& value) { m_cloneAppIdsHasBeenSet = true; m_cloneAppIds = value; }

    /**
     *
A list of source stack app IDs to be included in the cloned stack.

     */
    inline void SetCloneAppIds(Aws::Vector<Aws::String>&& value) { m_cloneAppIdsHasBeenSet = true; m_cloneAppIds = value; }

    /**
     *
A list of source stack app IDs to be included in the cloned stack.

     */
    inline CloneStackRequest& WithCloneAppIds(const Aws::Vector<Aws::String>& value) { SetCloneAppIds(value); return *this;}

    /**
     *
A list of source stack app IDs to be included in the cloned stack.

     */
    inline CloneStackRequest& WithCloneAppIds(Aws::Vector<Aws::String>&& value) { SetCloneAppIds(value); return *this;}

    /**
     *
A list of source stack app IDs to be included in the cloned stack.

     */
    inline CloneStackRequest& AddCloneAppIds(const Aws::String& value) { m_cloneAppIdsHasBeenSet = true; m_cloneAppIds.push_back(value); return *this; }

    /**
     *
A list of source stack app IDs to be included in the cloned stack.

     */
    inline CloneStackRequest& AddCloneAppIds(Aws::String&& value) { m_cloneAppIdsHasBeenSet = true; m_cloneAppIds.push_back(value); return *this; }

    /**
     *
A list of source stack app IDs to be included in the cloned stack.

     */
    inline CloneStackRequest& AddCloneAppIds(const char* value) { m_cloneAppIdsHasBeenSet = true; m_cloneAppIds.push_back(value); return *this; }

    /**
     *
The default root device type. This value is used by default for all instances
     * in the cloned stack, but you can override it when you create an instance. For
     * more information, see Storage
     * for the Root Device.

     */
    inline const RootDeviceType& GetDefaultRootDeviceType() const{ return m_defaultRootDeviceType; }

    /**
     *
The default root device type. This value is used by default for all instances
     * in the cloned stack, but you can override it when you create an instance. For
     * more information, see Storage
     * for the Root Device.

     */
    inline void SetDefaultRootDeviceType(const RootDeviceType& value) { m_defaultRootDeviceTypeHasBeenSet = true; m_defaultRootDeviceType = value; }

    /**
     *
The default root device type. This value is used by default for all instances
     * in the cloned stack, but you can override it when you create an instance. For
     * more information, see Storage
     * for the Root Device.

     */
    inline void SetDefaultRootDeviceType(RootDeviceType&& value) { m_defaultRootDeviceTypeHasBeenSet = true; m_defaultRootDeviceType = value; }

    /**
     *
The default root device type. This value is used by default for all instances
     * in the cloned stack, but you can override it when you create an instance. For
     * more information, see Storage
     * for the Root Device.

     */
    inline CloneStackRequest& WithDefaultRootDeviceType(const RootDeviceType& value) { SetDefaultRootDeviceType(value); return *this;}

    /**
     *
The default root device type. This value is used by default for all instances
     * in the cloned stack, but you can override it when you create an instance. For
     * more information, see Storage
     * for the Root Device.

     */
    inline CloneStackRequest& WithDefaultRootDeviceType(RootDeviceType&& value) { SetDefaultRootDeviceType(value); return *this;}

    /**
     *
The default AWS OpsWorks agent version. You have the following options:

     *

Auto-update - Set this parameter to LATEST. AWS
     * OpsWorks automatically installs new agent versions on the stack's instances as
     * soon as they are available.

Fixed version - Set this parameter
     * to your preferred agent version. To update the agent version, you must edit the
     * stack configuration and specify a new version. AWS OpsWorks then automatically
     * installs that version on the stack's instances.

The default
     * setting is LATEST. To specify an agent version, you must use the
     * complete version number, not the abbreviated number shown on the console. For a
     * list of available agent version numbers, call DescribeAgentVersions.

     * <note>
You can also specify an agent version when you create or update an
     * instance, which overrides the stack's default setting.
 </note>
     */
    inline const Aws::String& GetAgentVersion() const{ return m_agentVersion; }

    /**
     *
The default AWS OpsWorks agent version. You have the following options:

     *

Auto-update - Set this parameter to LATEST. AWS
     * OpsWorks automatically installs new agent versions on the stack's instances as
     * soon as they are available.

Fixed version - Set this parameter
     * to your preferred agent version. To update the agent version, you must edit the
     * stack configuration and specify a new version. AWS OpsWorks then automatically
     * installs that version on the stack's instances.

The default
     * setting is LATEST. To specify an agent version, you must use the
     * complete version number, not the abbreviated number shown on the console. For a
     * list of available agent version numbers, call DescribeAgentVersions.

     * <note>
You can also specify an agent version when you create or update an
     * instance, which overrides the stack's default setting.
 </note>
     */
    inline void SetAgentVersion(const Aws::String& value) { m_agentVersionHasBeenSet = true; m_agentVersion = value; }

    /**
     *
The default AWS OpsWorks agent version. You have the following options:

     *

Auto-update - Set this parameter to LATEST. AWS
     * OpsWorks automatically installs new agent versions on the stack's instances as
     * soon as they are available.

Fixed version - Set this parameter
     * to your preferred agent version. To update the agent version, you must edit the
     * stack configuration and specify a new version. AWS OpsWorks then automatically
     * installs that version on the stack's instances.

The default
     * setting is LATEST. To specify an agent version, you must use the
     * complete version number, not the abbreviated number shown on the console. For a
     * list of available agent version numbers, call DescribeAgentVersions.

     * <note>
You can also specify an agent version when you create or update an
     * instance, which overrides the stack's default setting.
 </note>
     */
    inline void SetAgentVersion(Aws::String&& value) { m_agentVersionHasBeenSet = true; m_agentVersion = value; }

    /**
     *
The default AWS OpsWorks agent version. You have the following options:

     *

Auto-update - Set this parameter to LATEST. AWS
     * OpsWorks automatically installs new agent versions on the stack's instances as
     * soon as they are available.

Fixed version - Set this parameter
     * to your preferred agent version. To update the agent version, you must edit the
     * stack configuration and specify a new version. AWS OpsWorks then automatically
     * installs that version on the stack's instances.

The default
     * setting is LATEST. To specify an agent version, you must use the
     * complete version number, not the abbreviated number shown on the console. For a
     * list of available agent version numbers, call DescribeAgentVersions.

     * <note>
You can also specify an agent version when you create or update an
     * instance, which overrides the stack's default setting.
 </note>
     */
    inline void SetAgentVersion(const char* value) { m_agentVersionHasBeenSet = true; m_agentVersion.assign(value); }

    /**
     *
The default AWS OpsWorks agent version. You have the following options:

     *

Auto-update - Set this parameter to LATEST. AWS
     * OpsWorks automatically installs new agent versions on the stack's instances as
     * soon as they are available.

Fixed version - Set this parameter
     * to your preferred agent version. To update the agent version, you must edit the
     * stack configuration and specify a new version. AWS OpsWorks then automatically
     * installs that version on the stack's instances.

The default
     * setting is LATEST. To specify an agent version, you must use the
     * complete version number, not the abbreviated number shown on the console. For a
     * list of available agent version numbers, call DescribeAgentVersions.

     * <note>
You can also specify an agent version when you create or update an
     * instance, which overrides the stack's default setting.
 </note>
     */
    inline CloneStackRequest& WithAgentVersion(const Aws::String& value) { SetAgentVersion(value); return *this;}

    /**
     *
The default AWS OpsWorks agent version. You have the following options:

     *

Auto-update - Set this parameter to LATEST. AWS
     * OpsWorks automatically installs new agent versions on the stack's instances as
     * soon as they are available.

Fixed version - Set this parameter
     * to your preferred agent version. To update the agent version, you must edit the
     * stack configuration and specify a new version. AWS OpsWorks then automatically
     * installs that version on the stack's instances.

The default
     * setting is LATEST. To specify an agent version, you must use the
     * complete version number, not the abbreviated number shown on the console. For a
     * list of available agent version numbers, call DescribeAgentVersions.

     * <note>
You can also specify an agent version when you create or update an
     * instance, which overrides the stack's default setting.
 </note>
     */
    inline CloneStackRequest& WithAgentVersion(Aws::String&& value) { SetAgentVersion(value); return *this;}

    /**
     *
The default AWS OpsWorks agent version. You have the following options:

     *

Auto-update - Set this parameter to LATEST. AWS
     * OpsWorks automatically installs new agent versions on the stack's instances as
     * soon as they are available.

Fixed version - Set this parameter
     * to your preferred agent version. To update the agent version, you must edit the
     * stack configuration and specify a new version. AWS OpsWorks then automatically
     * installs that version on the stack's instances.

The default
     * setting is LATEST. To specify an agent version, you must use the
     * complete version number, not the abbreviated number shown on the console. For a
     * list of available agent version numbers, call DescribeAgentVersions.

     * <note>
You can also specify an agent version when you create or update an
     * instance, which overrides the stack's default setting.
 </note>
     */
    inline CloneStackRequest& WithAgentVersion(const char* value) { SetAgentVersion(value); return *this;}

  private:
    Aws::String m_sourceStackId;
    bool m_sourceStackIdHasBeenSet;
    Aws::String m_name;
    bool m_nameHasBeenSet;
    Aws::String m_region;
    bool m_regionHasBeenSet;
    Aws::String m_vpcId;
    bool m_vpcIdHasBeenSet;
    Aws::Map<StackAttributesKeys, Aws::String> m_attributes;
    bool m_attributesHasBeenSet;
    Aws::String m_serviceRoleArn;
    bool m_serviceRoleArnHasBeenSet;
    Aws::String m_defaultInstanceProfileArn;
    bool m_defaultInstanceProfileArnHasBeenSet;
    Aws::String m_defaultOs;
    bool m_defaultOsHasBeenSet;
    Aws::String m_hostnameTheme;
    bool m_hostnameThemeHasBeenSet;
    Aws::String m_defaultAvailabilityZone;
    bool m_defaultAvailabilityZoneHasBeenSet;
    Aws::String m_defaultSubnetId;
    bool m_defaultSubnetIdHasBeenSet;
    Aws::String m_customJson;
    bool m_customJsonHasBeenSet;
    StackConfigurationManager m_configurationManager;
    bool m_configurationManagerHasBeenSet;
    ChefConfiguration m_chefConfiguration;
    bool m_chefConfigurationHasBeenSet;
    bool m_useCustomCookbooks;
    bool m_useCustomCookbooksHasBeenSet;
    bool m_useOpsworksSecurityGroups;
    bool m_useOpsworksSecurityGroupsHasBeenSet;
    Source m_customCookbooksSource;
    bool m_customCookbooksSourceHasBeenSet;
    Aws::String m_defaultSshKeyName;
    bool m_defaultSshKeyNameHasBeenSet;
    bool m_clonePermissions;
    bool m_clonePermissionsHasBeenSet;
    Aws::Vector<Aws::String> m_cloneAppIds;
    bool m_cloneAppIdsHasBeenSet;
    RootDeviceType m_defaultRootDeviceType;
    bool m_defaultRootDeviceTypeHasBeenSet;
    Aws::String m_agentVersion;
    bool m_agentVersionHasBeenSet;
  };

} // namespace Model
} // namespace OpsWorks
} // namespace Aws