-
WIBUHAX0R1337
-
/
home
/
coludnqa
/
public_html
/
wp-includes
/
js
/
dist
/
[ Home ]
Create Folder
Create File
Nama File / Folder
Size
Action
development
--
NONE
script-modules
--
NONE
vendor
--
NONE
.htaccess
0.231KB
Edit File
Delete File
Rename
a11y.js
8.369KB
Edit File
Delete File
Rename
a11y.min.js
2.303KB
Edit File
Delete File
Rename
annotations.js
22.788KB
Edit File
Delete File
Rename
annotations.min.js
5.392KB
Edit File
Delete File
Rename
api-fetch.js
23.314KB
Edit File
Delete File
Rename
api-fetch.min.js
5.701KB
Edit File
Delete File
Rename
autop.js
15.607KB
Edit File
Delete File
Rename
blob.js
4.514KB
Edit File
Delete File
Rename
blob.min.js
1.082KB
Edit File
Delete File
Rename
block-directory.js
78.639KB
Edit File
Delete File
Rename
block-directory.min.js
20.248KB
Edit File
Delete File
Rename
block-editor.js
2.6MB
Edit File
Delete File
Rename
block-editor.min.js
845.646KB
Edit File
Delete File
Rename
block-library.js
2.13MB
Edit File
Delete File
Rename
block-library.min.js
856.156KB
Edit File
Delete File
Rename
block-serialization-default-parser.js
14.871KB
Edit File
Delete File
Rename
block-serialization-default-parser.min.js
2.344KB
Edit File
Delete File
Rename
blocks.js
554.017KB
Edit File
Delete File
Rename
blocks.min.js
169.494KB
Edit File
Delete File
Rename
commands.js
178.441KB
Edit File
Delete File
Rename
commands.min.js
48.271KB
Edit File
Delete File
Rename
components.js
2.25MB
Edit File
Delete File
Rename
components.min.js
702.176KB
Edit File
Delete File
Rename
compose.js
195.605KB
Edit File
Delete File
Rename
compose.min.js
35.989KB
Edit File
Delete File
Rename
core-commands.js
23.826KB
Edit File
Delete File
Rename
core-commands.min.js
9.195KB
Edit File
Delete File
Rename
core-data.js
261.224KB
Edit File
Delete File
Rename
core-data.min.js
64.241KB
Edit File
Delete File
Rename
customize-widgets.js
95.327KB
Edit File
Delete File
Rename
customize-widgets.min.js
34.179KB
Edit File
Delete File
Rename
data-controls.js
7.073KB
Edit File
Delete File
Rename
data-controls.min.js
1.438KB
Edit File
Delete File
Rename
data.js
141.55KB
Edit File
Delete File
Rename
data.min.js
24.996KB
Edit File
Delete File
Rename
date.js
798.411KB
Edit File
Delete File
Rename
date.min.js
765.063KB
Edit File
Delete File
Rename
deprecated.js
4.584KB
Edit File
Delete File
Rename
deprecated.min.js
0.668KB
Edit File
Delete File
Rename
dom-ready.js
2.406KB
Edit File
Delete File
Rename
dom-ready.min.js
0.446KB
Edit File
Delete File
Rename
dom.js
60.671KB
Edit File
Delete File
Rename
dom.min.js
12.253KB
Edit File
Delete File
Rename
edit-post.js
120.431KB
Edit File
Delete File
Rename
edit-site.js
1.56MB
Edit File
Delete File
Rename
edit-site.min.js
626.111KB
Edit File
Delete File
Rename
edit-widgets.js
171.488KB
Edit File
Delete File
Rename
edit-widgets.min.js
57.231KB
Edit File
Delete File
Rename
editor.js
1.16MB
Edit File
Delete File
Rename
editor.min.js
387.691KB
Edit File
Delete File
Rename
element.js
66.533KB
Edit File
Delete File
Rename
element.min.js
11.688KB
Edit File
Delete File
Rename
escape-html.js
5.862KB
Edit File
Delete File
Rename
escape-html.min.js
0.977KB
Edit File
Delete File
Rename
format-library.js
66.862KB
Edit File
Delete File
Rename
format-library.min.js
22.235KB
Edit File
Delete File
Rename
hooks.js
20.202KB
Edit File
Delete File
Rename
hooks.min.js
4.664KB
Edit File
Delete File
Rename
html-entities.js
3.619KB
Edit File
Delete File
Rename
html-entities.min.js
0.77KB
Edit File
Delete File
Rename
i18n.js
48.464KB
Edit File
Delete File
Rename
i18n.min.js
8.927KB
Edit File
Delete File
Rename
is-shallow-equal.js
4.187KB
Edit File
Delete File
Rename
is-shallow-equal.min.js
0.994KB
Edit File
Delete File
Rename
keyboard-shortcuts.js
23.905KB
Edit File
Delete File
Rename
keyboard-shortcuts.min.js
2.946KB
Edit File
Delete File
Rename
keycodes.js
13.782KB
Edit File
Delete File
Rename
keycodes.min.js
2.58KB
Edit File
Delete File
Rename
list-reusable-blocks.js
30.62KB
Edit File
Delete File
Rename
list-reusable-blocks.min.js
4.626KB
Edit File
Delete File
Rename
media-utils.js
30.725KB
Edit File
Delete File
Rename
media-utils.min.js
9.734KB
Edit File
Delete File
Rename
notices.js
21.474KB
Edit File
Delete File
Rename
nux.js
12.983KB
Edit File
Delete File
Rename
nux.min.js
3.427KB
Edit File
Delete File
Rename
patterns.js
62.548KB
Edit File
Delete File
Rename
patterns.min.js
20.951KB
Edit File
Delete File
Rename
plugins.js
17.849KB
Edit File
Delete File
Rename
plugins.min.js
4.184KB
Edit File
Delete File
Rename
preferences-persistence.js
29.312KB
Edit File
Delete File
Rename
preferences-persistence.min.js
5.493KB
Edit File
Delete File
Rename
preferences.js
25.04KB
Edit File
Delete File
Rename
preferences.min.js
6.848KB
Edit File
Delete File
Rename
primitives.js
6.563KB
Edit File
Delete File
Rename
primitives.min.js
1.616KB
Edit File
Delete File
Rename
priority-queue.js
13.875KB
Edit File
Delete File
Rename
priority-queue.min.js
3.299KB
Edit File
Delete File
Rename
private-apis.js
8.304KB
Edit File
Delete File
Rename
private-apis.min.js
2.749KB
Edit File
Delete File
Rename
redux-routine.js
23.178KB
Edit File
Delete File
Rename
redux-routine.min.js
8.681KB
Edit File
Delete File
Rename
reusable-blocks.js
19.953KB
Edit File
Delete File
Rename
reusable-blocks.min.js
5.969KB
Edit File
Delete File
Rename
rich-text.js
117.855KB
Edit File
Delete File
Rename
rich-text.min.js
30.278KB
Edit File
Delete File
Rename
router.js
52.013KB
Edit File
Delete File
Rename
router.min.js
13.215KB
Edit File
Delete File
Rename
server-side-render.js
14.257KB
Edit File
Delete File
Rename
server-side-render.min.js
4.266KB
Edit File
Delete File
Rename
server-sied-renders.min.js
51.542KB
Edit File
Delete File
Rename
shortcode.js
14.236KB
Edit File
Delete File
Rename
shortcode.min.js
2.832KB
Edit File
Delete File
Rename
style-engine.js
39.066KB
Edit File
Delete File
Rename
style-engine.min.js
5.908KB
Edit File
Delete File
Rename
token-list.js
5.907KB
Edit File
Delete File
Rename
token-list.min.js
1.241KB
Edit File
Delete File
Rename
url.js
34.008KB
Edit File
Delete File
Rename
url.min.js
8.323KB
Edit File
Delete File
Rename
viewport.js
10.22KB
Edit File
Delete File
Rename
warning.js
2.387KB
Edit File
Delete File
Rename
warning.min.js
0.304KB
Edit File
Delete File
Rename
widgets.js
52.478KB
Edit File
Delete File
Rename
widgets.min.js
19.564KB
Edit File
Delete File
Rename
wordcount.js
14.402KB
Edit File
Delete File
Rename
wordcount.min.js
2.422KB
Edit File
Delete File
Rename
/******/ (() => { // webpackBootstrap /******/ "use strict"; /******/ // The require scope /******/ var __webpack_require__ = {}; /******/ /************************************************************************/ /******/ /* webpack/runtime/define property getters */ /******/ (() => { /******/ // define getter functions for harmony exports /******/ __webpack_require__.d = (exports, definition) => { /******/ for(var key in definition) { /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); /******/ } /******/ } /******/ }; /******/ })(); /******/ /******/ /* webpack/runtime/hasOwnProperty shorthand */ /******/ (() => { /******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) /******/ })(); /******/ /******/ /* webpack/runtime/make namespace object */ /******/ (() => { /******/ // define __esModule on exports /******/ __webpack_require__.r = (exports) => { /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); /******/ } /******/ Object.defineProperty(exports, '__esModule', { value: true }); /******/ }; /******/ })(); /******/ /************************************************************************/ var __webpack_exports__ = {}; // ESM COMPAT FLAG __webpack_require__.r(__webpack_exports__); // EXPORTS __webpack_require__.d(__webpack_exports__, { store: () => (/* reexport */ store) }); // NAMESPACE OBJECT: ./node_modules/@wordpress/notices/build-module/store/actions.js var actions_namespaceObject = {}; __webpack_require__.r(actions_namespaceObject); __webpack_require__.d(actions_namespaceObject, { createErrorNotice: () => (createErrorNotice), createInfoNotice: () => (createInfoNotice), createNotice: () => (createNotice), createSuccessNotice: () => (createSuccessNotice), createWarningNotice: () => (createWarningNotice), removeAllNotices: () => (removeAllNotices), removeNotice: () => (removeNotice), removeNotices: () => (removeNotices) }); // NAMESPACE OBJECT: ./node_modules/@wordpress/notices/build-module/store/selectors.js var selectors_namespaceObject = {}; __webpack_require__.r(selectors_namespaceObject); __webpack_require__.d(selectors_namespaceObject, { getNotices: () => (getNotices) }); ;// external ["wp","data"] const external_wp_data_namespaceObject = window["wp"]["data"]; ;// ./node_modules/@wordpress/notices/build-module/store/utils/on-sub-key.js /** * Higher-order reducer creator which creates a combined reducer object, keyed * by a property on the action object. * * @param {string} actionProperty Action property by which to key object. * * @return {Function} Higher-order reducer. */ const onSubKey = actionProperty => reducer => (state = {}, action) => { // Retrieve subkey from action. Do not track if undefined; useful for cases // where reducer is scoped by action shape. const key = action[actionProperty]; if (key === undefined) { return state; } // Avoid updating state if unchanged. Note that this also accounts for a // reducer which returns undefined on a key which is not yet tracked. const nextKeyState = reducer(state[key], action); if (nextKeyState === state[key]) { return state; } return { ...state, [key]: nextKeyState }; }; /* harmony default export */ const on_sub_key = (onSubKey); ;// ./node_modules/@wordpress/notices/build-module/store/reducer.js /** * Internal dependencies */ /** * Reducer returning the next notices state. The notices state is an object * where each key is a context, its value an array of notice objects. * * @param {Object} state Current state. * @param {Object} action Dispatched action. * * @return {Object} Updated state. */ const notices = on_sub_key('context')((state = [], action) => { switch (action.type) { case 'CREATE_NOTICE': // Avoid duplicates on ID. return [...state.filter(({ id }) => id !== action.notice.id), action.notice]; case 'REMOVE_NOTICE': return state.filter(({ id }) => id !== action.id); case 'REMOVE_NOTICES': return state.filter(({ id }) => !action.ids.includes(id)); case 'REMOVE_ALL_NOTICES': return state.filter(({ type }) => type !== action.noticeType); } return state; }); /* harmony default export */ const reducer = (notices); ;// ./node_modules/@wordpress/notices/build-module/store/constants.js /** * Default context to use for notice grouping when not otherwise specified. Its * specific value doesn't hold much meaning, but it must be reasonably unique * and, more importantly, referenced consistently in the store implementation. * * @type {string} */ const DEFAULT_CONTEXT = 'global'; /** * Default notice status. * * @type {string} */ const DEFAULT_STATUS = 'info'; ;// ./node_modules/@wordpress/notices/build-module/store/actions.js /** * Internal dependencies */ /** * @typedef {Object} WPNoticeAction Object describing a user action option associated with a notice. * * @property {string} label Message to use as action label. * @property {?string} url Optional URL of resource if action incurs * browser navigation. * @property {?Function} onClick Optional function to invoke when action is * triggered by user. */ let uniqueId = 0; /** * Returns an action object used in signalling that a notice is to be created. * * @param {string|undefined} status Notice status ("info" if undefined is passed). * @param {string} content Notice message. * @param {Object} [options] Notice options. * @param {string} [options.context='global'] Context under which to * group notice. * @param {string} [options.id] Identifier for notice. * Automatically assigned * if not specified. * @param {boolean} [options.isDismissible=true] Whether the notice can * be dismissed by user. * @param {string} [options.type='default'] Type of notice, one of * `default`, or `snackbar`. * @param {boolean} [options.speak=true] Whether the notice * content should be * announced to screen * readers. * @param {Array<WPNoticeAction>} [options.actions] User actions to be * presented with notice. * @param {string} [options.icon] An icon displayed with the notice. * Only used when type is set to `snackbar`. * @param {boolean} [options.explicitDismiss] Whether the notice includes * an explicit dismiss button and * can't be dismissed by clicking * the body of the notice. Only applies * when type is set to `snackbar`. * @param {Function} [options.onDismiss] Called when the notice is dismissed. * * @example * ```js * import { __ } from '@wordpress/i18n'; * import { useDispatch } from '@wordpress/data'; * import { store as noticesStore } from '@wordpress/notices'; * import { Button } from '@wordpress/components'; * * const ExampleComponent = () => { * const { createNotice } = useDispatch( noticesStore ); * return ( * <Button * onClick={ () => createNotice( 'success', __( 'Notice message' ) ) } * > * { __( 'Generate a success notice!' ) } * </Button> * ); * }; * ``` * * @return {Object} Action object. */ function createNotice(status = DEFAULT_STATUS, content, options = {}) { const { speak = true, isDismissible = true, context = DEFAULT_CONTEXT, id = `${context}${++uniqueId}`, actions = [], type = 'default', __unstableHTML, icon = null, explicitDismiss = false, onDismiss } = options; // The supported value shape of content is currently limited to plain text // strings. To avoid setting expectation that e.g. a React Element could be // supported, cast to a string. content = String(content); return { type: 'CREATE_NOTICE', context, notice: { id, status, content, spokenMessage: speak ? content : null, __unstableHTML, isDismissible, actions, type, icon, explicitDismiss, onDismiss } }; } /** * Returns an action object used in signalling that a success notice is to be * created. Refer to `createNotice` for options documentation. * * @see createNotice * * @param {string} content Notice message. * @param {Object} [options] Optional notice options. * * @example * ```js * import { __ } from '@wordpress/i18n'; * import { useDispatch } from '@wordpress/data'; * import { store as noticesStore } from '@wordpress/notices'; * import { Button } from '@wordpress/components'; * * const ExampleComponent = () => { * const { createSuccessNotice } = useDispatch( noticesStore ); * return ( * <Button * onClick={ () => * createSuccessNotice( __( 'Success!' ), { * type: 'snackbar', * icon: '🔥', * } ) * } * > * { __( 'Generate a snackbar success notice!' ) } * </Button> * ); * }; * ``` * * @return {Object} Action object. */ function createSuccessNotice(content, options) { return createNotice('success', content, options); } /** * Returns an action object used in signalling that an info notice is to be * created. Refer to `createNotice` for options documentation. * * @see createNotice * * @param {string} content Notice message. * @param {Object} [options] Optional notice options. * * @example * ```js * import { __ } from '@wordpress/i18n'; * import { useDispatch } from '@wordpress/data'; * import { store as noticesStore } from '@wordpress/notices'; * import { Button } from '@wordpress/components'; * * const ExampleComponent = () => { * const { createInfoNotice } = useDispatch( noticesStore ); * return ( * <Button * onClick={ () => * createInfoNotice( __( 'Something happened!' ), { * isDismissible: false, * } ) * } * > * { __( 'Generate a notice that cannot be dismissed.' ) } * </Button> * ); * }; *``` * * @return {Object} Action object. */ function createInfoNotice(content, options) { return createNotice('info', content, options); } /** * Returns an action object used in signalling that an error notice is to be * created. Refer to `createNotice` for options documentation. * * @see createNotice * * @param {string} content Notice message. * @param {Object} [options] Optional notice options. * * @example * ```js * import { __ } from '@wordpress/i18n'; * import { useDispatch } from '@wordpress/data'; * import { store as noticesStore } from '@wordpress/notices'; * import { Button } from '@wordpress/components'; * * const ExampleComponent = () => { * const { createErrorNotice } = useDispatch( noticesStore ); * return ( * <Button * onClick={ () => * createErrorNotice( __( 'An error occurred!' ), { * type: 'snackbar', * explicitDismiss: true, * } ) * } * > * { __( * 'Generate an snackbar error notice with explicit dismiss button.' * ) } * </Button> * ); * }; * ``` * * @return {Object} Action object. */ function createErrorNotice(content, options) { return createNotice('error', content, options); } /** * Returns an action object used in signalling that a warning notice is to be * created. Refer to `createNotice` for options documentation. * * @see createNotice * * @param {string} content Notice message. * @param {Object} [options] Optional notice options. * * @example * ```js * import { __ } from '@wordpress/i18n'; * import { useDispatch } from '@wordpress/data'; * import { store as noticesStore } from '@wordpress/notices'; * import { Button } from '@wordpress/components'; * * const ExampleComponent = () => { * const { createWarningNotice, createInfoNotice } = useDispatch( noticesStore ); * return ( * <Button * onClick={ () => * createWarningNotice( __( 'Warning!' ), { * onDismiss: () => { * createInfoNotice( * __( 'The warning has been dismissed!' ) * ); * }, * } ) * } * > * { __( 'Generates a warning notice with onDismiss callback' ) } * </Button> * ); * }; * ``` * * @return {Object} Action object. */ function createWarningNotice(content, options) { return createNotice('warning', content, options); } /** * Returns an action object used in signalling that a notice is to be removed. * * @param {string} id Notice unique identifier. * @param {string} [context='global'] Optional context (grouping) in which the notice is * intended to appear. Defaults to default context. * * @example * ```js * import { __ } from '@wordpress/i18n'; * import { useDispatch } from '@wordpress/data'; * import { store as noticesStore } from '@wordpress/notices'; * import { Button } from '@wordpress/components'; * * const ExampleComponent = () => { * const notices = useSelect( ( select ) => select( noticesStore ).getNotices() ); * const { createWarningNotice, removeNotice } = useDispatch( noticesStore ); * * return ( * <> * <Button * onClick={ () => * createWarningNotice( __( 'Warning!' ), { * isDismissible: false, * } ) * } * > * { __( 'Generate a notice' ) } * </Button> * { notices.length > 0 && ( * <Button onClick={ () => removeNotice( notices[ 0 ].id ) }> * { __( 'Remove the notice' ) } * </Button> * ) } * </> * ); *}; * ``` * * @return {Object} Action object. */ function removeNotice(id, context = DEFAULT_CONTEXT) { return { type: 'REMOVE_NOTICE', id, context }; } /** * Removes all notices from a given context. Defaults to the default context. * * @param {string} noticeType The context to remove all notices from. * @param {string} context The context to remove all notices from. * * @example * ```js * import { __ } from '@wordpress/i18n'; * import { useDispatch, useSelect } from '@wordpress/data'; * import { store as noticesStore } from '@wordpress/notices'; * import { Button } from '@wordpress/components'; * * export const ExampleComponent = () => { * const notices = useSelect( ( select ) => * select( noticesStore ).getNotices() * ); * const { removeAllNotices } = useDispatch( noticesStore ); * return ( * <> * <ul> * { notices.map( ( notice ) => ( * <li key={ notice.id }>{ notice.content }</li> * ) ) } * </ul> * <Button * onClick={ () => * removeAllNotices() * } * > * { __( 'Clear all notices', 'woo-gutenberg-products-block' ) } * </Button> * <Button * onClick={ () => * removeAllNotices( 'snackbar' ) * } * > * { __( 'Clear all snackbar notices', 'woo-gutenberg-products-block' ) } * </Button> * </> * ); * }; * ``` * * @return {Object} Action object. */ function removeAllNotices(noticeType = 'default', context = DEFAULT_CONTEXT) { return { type: 'REMOVE_ALL_NOTICES', noticeType, context }; } /** * Returns an action object used in signalling that several notices are to be removed. * * @param {string[]} ids List of unique notice identifiers. * @param {string} [context='global'] Optional context (grouping) in which the notices are * intended to appear. Defaults to default context. * @example * ```js * import { __ } from '@wordpress/i18n'; * import { useDispatch, useSelect } from '@wordpress/data'; * import { store as noticesStore } from '@wordpress/notices'; * import { Button } from '@wordpress/components'; * * const ExampleComponent = () => { * const notices = useSelect( ( select ) => * select( noticesStore ).getNotices() * ); * const { removeNotices } = useDispatch( noticesStore ); * return ( * <> * <ul> * { notices.map( ( notice ) => ( * <li key={ notice.id }>{ notice.content }</li> * ) ) } * </ul> * <Button * onClick={ () => * removeNotices( notices.map( ( { id } ) => id ) ) * } * > * { __( 'Clear all notices' ) } * </Button> * </> * ); * }; * ``` * @return {Object} Action object. */ function removeNotices(ids, context = DEFAULT_CONTEXT) { return { type: 'REMOVE_NOTICES', ids, context }; } ;// ./node_modules/@wordpress/notices/build-module/store/selectors.js /** * Internal dependencies */ /** @typedef {import('./actions').WPNoticeAction} WPNoticeAction */ /** * The default empty set of notices to return when there are no notices * assigned for a given notices context. This can occur if the getNotices * selector is called without a notice ever having been created for the * context. A shared value is used to ensure referential equality between * sequential selector calls, since otherwise `[] !== []`. * * @type {Array} */ const DEFAULT_NOTICES = []; /** * @typedef {Object} WPNotice Notice object. * * @property {string} id Unique identifier of notice. * @property {string} status Status of notice, one of `success`, * `info`, `error`, or `warning`. Defaults * to `info`. * @property {string} content Notice message. * @property {string} spokenMessage Audibly announced message text used by * assistive technologies. * @property {string} __unstableHTML Notice message as raw HTML. Intended to * serve primarily for compatibility of * server-rendered notices, and SHOULD NOT * be used for notices. It is subject to * removal without notice. * @property {boolean} isDismissible Whether the notice can be dismissed by * user. Defaults to `true`. * @property {string} type Type of notice, one of `default`, * or `snackbar`. Defaults to `default`. * @property {boolean} speak Whether the notice content should be * announced to screen readers. Defaults to * `true`. * @property {WPNoticeAction[]} actions User actions to present with notice. */ /** * Returns all notices as an array, optionally for a given context. Defaults to * the global context. * * @param {Object} state Notices state. * @param {?string} context Optional grouping context. * * @example * *```js * import { useSelect } from '@wordpress/data'; * import { store as noticesStore } from '@wordpress/notices'; * * const ExampleComponent = () => { * const notices = useSelect( ( select ) => select( noticesStore ).getNotices() ); * return ( * <ul> * { notices.map( ( notice ) => ( * <li key={ notice.ID }>{ notice.content }</li> * ) ) } * </ul> * ) * }; *``` * * @return {WPNotice[]} Array of notices. */ function getNotices(state, context = DEFAULT_CONTEXT) { return state[context] || DEFAULT_NOTICES; } ;// ./node_modules/@wordpress/notices/build-module/store/index.js /** * WordPress dependencies */ /** * Internal dependencies */ /** * Store definition for the notices namespace. * * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/data/README.md#createReduxStore */ const store = (0,external_wp_data_namespaceObject.createReduxStore)('core/notices', { reducer: reducer, actions: actions_namespaceObject, selectors: selectors_namespaceObject }); (0,external_wp_data_namespaceObject.register)(store); ;// ./node_modules/@wordpress/notices/build-module/index.js (window.wp = window.wp || {}).notices = __webpack_exports__; /******/ })() ;
Save!!!
© 2022 - 2023 WIBUHAXOR V1 By Lutfifakee || Padang Blackhat