PackageInfo.java revision 9066cfe9886ac131c34d59ed0e2d287b0e3c0087
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.content.pm;
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcel;
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcelable;
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Overall information about the contents of a package.  This corresponds
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to all of the information collected from AndroidManifest.xml.
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class PackageInfo implements Parcelable {
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The name of this package.  From the <manifest> tag's "name"
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * attribute.
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String packageName;
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The version number of this package, as specified by the <manifest>
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * tag's {@link android.R.styleable#AndroidManifest_versionCode versionCode}
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * attribute.
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int versionCode;
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The version name of this package, as specified by the <manifest>
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * tag's {@link android.R.styleable#AndroidManifest_versionName versionName}
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * attribute.
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String versionName;
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The shared user ID name of this package, as specified by the <manifest>
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * tag's {@link android.R.styleable#AndroidManifest_sharedUserId sharedUserId}
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * attribute.
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String sharedUserId;
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The shared user ID label of this package, as specified by the <manifest>
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * tag's {@link android.R.styleable#AndroidManifest_sharedUserLabel sharedUserLabel}
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * attribute.
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int sharedUserLabel;
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Information collected from the <application> tag, or null if
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * there was none.
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public ApplicationInfo applicationInfo;
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * All kernel group-IDs that have been assigned to this package.
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * This is only filled in if the flag {@link PackageManager#GET_GIDS} was set.
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int[] gids;
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Array of all {@link android.R.styleable#AndroidManifestActivity
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <activity>} tags included under <application>,
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * or null if there were none.  This is only filled in if the flag
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link PackageManager#GET_ACTIVITIES} was set.
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public ActivityInfo[] activities;
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Array of all {@link android.R.styleable#AndroidManifestReceiver
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <receiver>} tags included under <application>,
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * or null if there were none.  This is only filled in if the flag
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link PackageManager#GET_RECEIVERS} was set.
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public ActivityInfo[] receivers;
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Array of all {@link android.R.styleable#AndroidManifestService
759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <service>} tags included under <application>,
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * or null if there were none.  This is only filled in if the flag
779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link PackageManager#GET_SERVICES} was set.
789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public ServiceInfo[] services;
809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Array of all {@link android.R.styleable#AndroidManifestProvider
839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <provider>} tags included under <application>,
849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * or null if there were none.  This is only filled in if the flag
859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link PackageManager#GET_PROVIDERS} was set.
869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public ProviderInfo[] providers;
889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Array of all {@link android.R.styleable#AndroidManifestInstrumentation
919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <instrumentation>} tags included under <manifest>,
929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * or null if there were none.  This is only filled in if the flag
939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link PackageManager#GET_INSTRUMENTATION} was set.
949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public InstrumentationInfo[] instrumentation;
969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Array of all {@link android.R.styleable#AndroidManifestPermission
999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <permission>} tags included under <manifest>,
1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * or null if there were none.  This is only filled in if the flag
1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link PackageManager#GET_PERMISSIONS} was set.
1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public PermissionInfo[] permissions;
1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Array of all {@link android.R.styleable#AndroidManifestUsesPermission
1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <uses-permission>} tags included under <manifest>,
1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * or null if there were none.  This is only filled in if the flag
1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link PackageManager#GET_PERMISSIONS} was set.  This list includes
1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * all permissions requested, even those that were not granted or known
1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * by the system at install time.
1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String[] requestedPermissions;
1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Array of all signatures read from the package file.  This is only filled
1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * in if the flag {@link PackageManager#GET_SIGNATURES} was set.
1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public Signature[] signatures;
1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Application specified preferred configuration
1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.R.styleable#AndroidManifestUsesConfiguration
1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <uses-configuration>} tags included under <manifest>,
1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * or null if there were none. This is only filled in if the flag
1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link PackageManager#GET_CONFIGURATIONS} was set.
1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public ConfigurationInfo[] configPreferences;
1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public PackageInfo() {
1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String toString() {
1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return "PackageInfo{"
1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            + Integer.toHexString(System.identityHashCode(this))
1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            + " " + packageName + "}";
1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int describeContents() {
1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return 0;
1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void writeToParcel(Parcel dest, int parcelableFlags) {
1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        dest.writeString(packageName);
1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        dest.writeInt(versionCode);
1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        dest.writeString(versionName);
1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        dest.writeString(sharedUserId);
1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        dest.writeInt(sharedUserLabel);
1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (applicationInfo != null) {
1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeInt(1);
1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            applicationInfo.writeToParcel(dest, parcelableFlags);
1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } else {
1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeInt(0);
1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        dest.writeIntArray(gids);
1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        dest.writeTypedArray(activities, parcelableFlags);
1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        dest.writeTypedArray(receivers, parcelableFlags);
1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        dest.writeTypedArray(services, parcelableFlags);
1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        dest.writeTypedArray(providers, parcelableFlags);
1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        dest.writeTypedArray(instrumentation, parcelableFlags);
1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        dest.writeTypedArray(permissions, parcelableFlags);
1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        dest.writeStringArray(requestedPermissions);
1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        dest.writeTypedArray(signatures, parcelableFlags);
1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        dest.writeTypedArray(configPreferences, parcelableFlags);
1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final Parcelable.Creator<PackageInfo> CREATOR
1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            = new Parcelable.Creator<PackageInfo>() {
1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public PackageInfo createFromParcel(Parcel source) {
1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return new PackageInfo(source);
1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public PackageInfo[] newArray(int size) {
1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return new PackageInfo[size];
1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    };
1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private PackageInfo(Parcel source) {
1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        packageName = source.readString();
1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        versionCode = source.readInt();
1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        versionName = source.readString();
1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        sharedUserId = source.readString();
1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        sharedUserLabel = source.readInt();
1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int hasApp = source.readInt();
1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (hasApp != 0) {
1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            applicationInfo = ApplicationInfo.CREATOR.createFromParcel(source);
1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        gids = source.createIntArray();
1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        activities = source.createTypedArray(ActivityInfo.CREATOR);
1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        receivers = source.createTypedArray(ActivityInfo.CREATOR);
1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        services = source.createTypedArray(ServiceInfo.CREATOR);
1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        providers = source.createTypedArray(ProviderInfo.CREATOR);
1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        instrumentation = source.createTypedArray(InstrumentationInfo.CREATOR);
1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        permissions = source.createTypedArray(PermissionInfo.CREATOR);
1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        requestedPermissions = source.createStringArray();
1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        signatures = source.createTypedArray(Signature.CREATOR);
1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        configPreferences = source.createTypedArray(ConfigurationInfo.CREATOR);
1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
200